Kilde kode: Lib/copy.py
Oppdrag uttalelser i Python ikke kopiere objekter, de skaper bindingsbetween et mål og et objekt. For samlinger som er foranderlig eller containmutable elementer, en kopi er noen ganger nødvendig, slik at man kan endre en kopi withoutchanging den andre. Denne modulen gir generisk grunt og dypt copyoperations (forklart nedenfor).
Grensesnitt oppsummering:
copy.
copy
(x)¶
Gå en liten kopi av x.,
copy.
deepcopy
(x)¶
Gå en dyp kopi av x.
unntak copy.
error
¶
Hevet for modul spesifikke feil.
forskjellen mellom grunt og dypt kopiering er bare relevant for compoundobjects (objekter som inneholder andre objekter, slik som lister eller klasse forekomster):
-
En grunn kopi konstruerer en ny sammensatt objekt og deretter (til extentpossible) setter inn referanser i det å gjenstandene som finnes i den opprinnelige.,
-
En dyp kopi konstruerer en ny sammensatt objekt og deretter, med undermapper, insertscopies inn i det av gjenstandene som ble funnet i den opprinnelige.
To problemer ofte eksisterer med dyp kopi operasjoner som ikke eksisterer med shallowcopy virksomhet:
-
Rekursiv objekter (sammensatte objekter som, direkte eller indirekte, inneholder areference til seg selv, kan det føre til en rekursiv loop.
-
Fordi dyp kopi kopierer alt det kan kopiere for mye, slik som datawhich er ment å være felles mellom kopier.,
deepcopy()
funksjon unngår disse problemene ved:
-
å holde en
memo
ordliste av objekter som allerede er kopiert under currentcopying skje; og -
la brukerdefinerte klasser overstyre kopiering eller sett ofcomponents kopiert.
Denne modulen ikke kopiere typer som modul, metode, stack trace, stabelen ramme,fil, kontakt, window, array, eller andre lignende typer., Det gjør «kopier» for funksjoner andclasses (grunt og dypt), ved å returnere det originale objektet uendret; thisis kompatibel med måten disse behandles av pickle
modulen.
Klasser kan bruke samme grensesnitt til å kontrollere kopiering som de bruker til å controlpickling. Se beskrivelse av modulen pickle
for informasjon om thesemethods. Faktisk, copy
modulen bruker registeredpickle funksjoner fra copyreg
modulen.,
for en klasse til å definere sin egen kopi gjennomføring, kan det definespecial metoder __copy__()
og __deepcopy__()
. Tidligere er calledto implementere grunn kopi drift; ingen ytterligere argumenter er passert.Sistnevnte er kalt til å gjennomføre dype kopi drift; det er gått oneargument, memo
ordliste., Hvis __deepcopy__()
implementering needsto gjøre en dyp kopi av en komponent, bør det ringe deepcopy()
functionwith komponenten som første argument og memo ordbok som andre argument.
Se også
Modulen pickle
Diskusjon av spesielle metoder som brukes til å støtte objekt staten henting andrestoration.
Legg igjen en kommentar