– forráskód: Lib/copy.py
a Feladat nyilatkozatok a Python nem másolja a tárgyakat hoznak létre bindingsbetween egy cél, illetve egy tárgy. Olyan gyűjtemények esetében, amelyek változékonyak vagy tartalmaznakváltoztatható elemek, néha szükség van egy másolatra, hogy az egyik példányt megváltoztassa a másik nélkül. Ez a modul általános sekély, mély copyoperations (az alábbiakban ismertetjük).
interfész összefoglaló:
copy.
copy
(x)¶
visszaadja az X sekély példányát.,
copy.
deepcopy
(x)¶
visszaadja az X mély másolatát.
kivétel copy.
error
Modulspecifikus hibák miatt felmerült.
a sekély és mély másolás közötti különbség csak a compoundobjects (más objektumokat, például listákat vagy osztálypéldányokat tartalmazó objektumok) esetében releváns:
-
egy sekély példány új összetett objektumot alkot, majd (kiterjeszthető) beilleszti a hivatkozásokat az eredetiben található objektumokra.,
-
a deep copy egy új összetett objektumot épít ki, majd rekurzív módon beilleszti bele az eredetiben található objektumokat.
két probléma gyakran létezik olyan mélymásolási műveletekkel, amelyek nem léteznek a shallowcopy műveletekkel:
-
rekurzív objektumok (olyan összetett objektumok, amelyek közvetlenül vagy közvetve tartalmaznak areferációt maguknak) rekurzív hurkot okozhatnak.
-
mert a deep copy mindent lemásol, amit túl sokat másolhat, például az adatokat, amelyeket meg kell osztani a másolatok között.,
a deepcopy()
függvény elkerüli ezeket a problémákat:
-
a
memo
a currentcopying pass alatt már lemásolt objektumok szótára; és -
a felhasználó által definiált osztályok felülbírálhatják a másolási műveletet vagy a components készletet másolva.
Ez a modul nem másol olyan típusokat, mint a modul, a módszer, a stack trace,a stack frame, a fájl, az aljzat, az ablak, a tömb vagy bármilyen hasonló típus., Ez nem “copy” funkciók ésosztályok (sekély és mélyen), visszatérve az eredeti objektum változatlan; ez kompatibilis azzal, ahogy ezeket kezelik a pickle
modul.a
osztályok ugyanazokat az interfészeket használhatják a másolás vezérlésére, mint a controlpickling. Lásd a pickle
modul leírását a fentiekre vonatkozó információkért. módszerek. Valójában acopy
modul acopyreg
modul registeredpickle funkcióit használja.,
annak érdekében, hogy egy osztály meghatározza saját példányának végrehajtását, meghatározhatjaspeciális módszerek __copy__()
és __deepcopy__()
. Az előbbit hívjáka sekély másolási művelet végrehajtásához; további érvek nem kerülnek átadásra.Ez utóbbit a mélymásolási művelet végrehajtására hívják fel; továbbítjákeargument, a memo
szótár., Ha a__deepcopy__()
implementációnak szüksége van egy összetevő mély másolatának elkészítésére, akkor adeepcopy()
függvényt kell hívnia az összetevővel első argumentumként, a memo szótár pedig második argumentumként.
Lásd még:
modul pickle
az objektumállapot-lekérdezés támogatásához használt speciális módszerek megvitatása andrestoration.
Vélemény, hozzászólás?