– 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.