Kildekode: Lib/copy.py

Tildeling af erklæringer i Python ikke kopiere objekter, de skaber bindingsbetween et mål og et objekt. For samlinger, der er mutable eller containmutable elementer, er en kopi undertiden nødvendig, så man kan ændre en kopi uden at ændre den anden. Dette modul giver generiske lavvandede og dybe copyoperations (forklaret nedenfor).

interface resum::

copy.copy(.) <

returner en overfladisk kopi af..,

copy.deepcopy(x)¶

Returnere en dyb kopi af x.

bortset copy.error

Rejst til modul specifikke fejl.

forskellen mellem lavt og dybt kopiering er kun relevant for compoundobjects (objekter, der kan indeholde andre objekter, som lister eller klasse forekomster):

  • En overfladisk kopi konstruerer en ny sammensat objekt og derefter (til extentpossible) skær referencer ind i det, til de objekter, der findes i den originale.,

  • en dyb kopi konstruerer et nyt sammensat objekt og indsætter derefter rekursivt kopier af de objekter, der findes i originalen.

To problemer, der ofte findes med dyb kopi operationer, der ikke findes med shallowcopy operationer:

  • Rekursiv objekter (sammensatte objekter, der, direkte eller indirekte, indeholder enreference til sig selv), kan forårsage en rekursiv loop.

  • fordi deep copy kopierer alt det kan kopiere for meget, såsom data, som er beregnet til at blive delt mellem kopier.,

deepcopy() funktion undgår disse problemer ved at:

  • holde en memo ordbog af objekter, der allerede er kopieret i currentcopying passere; og

  • at lade bruger-definerede klasser tilsidesætte kopiering af drift, eller den indstillede ofcomponents kopieret.

Dette modul kopierer ikke typer som modul, metode, stack trace, stack frame,file, socket, windowindo., array eller lignende typer., Det gør” kopier ” funktioner ogklasser (lavt og dybt) ved at returnere det originale objekt uændret; dette er kompatibelt med den måde, disse behandles af pickle modul.

klasser kan bruge de samme grænseflader til at styre kopiering, som de bruger til at controlpickling. Se beskrivelsen af modul pickle for information om disse metoder. Faktisk bruger copy modulet de registrerede funktioner fracopyreg modulet.,

for at en klasse til at definere sin egen kopi gennemførelse, kan det definespecial metoder __copy__() og __deepcopy__(). Den førstnævnte kaldesat gennemføre den lave kopioperation, ingen yderligere argumenter er bestået.Sidstnævnte kaldes for at gennemføre deep copy-operationen; den er videregivetargument, memo ordbog., Hvis __deepcopy__() gennemførelsen needsto lave en dyb kopi af en komponent, bør det kalder deepcopy() kreditfunktionmed den komponent, som første argument og memo ordbog som andet argument.

Se også

modul pickle

diskussion af de specielle metoder, der bruges til at understøtte objekttilstands hentning og restaurering.