Zdrojový kód: Lib/copy.py

příkazy Přiřazení v Pythonu ne kopírovat objekty, které vytvářejí bindingsbetween cíl a objekt. Pro sbírky, které jsou proměnlivé nebo obsahujícímutné položky, kopie je někdy potřeba, takže jeden může změnit jednu kopii bezzměna druhého. Tento modul poskytuje obecné mělké a hluboké copyoperace (vysvětleno níže).

souhrn rozhraní:

copy. copy (x)¶

vraťte mělkou kopii x.,

copy.deepcopy(x)¶

Návrat hlubokou kopii x.

výjimky copy.error

Aktivována pro modul specifické chyby.

rozdíl mezi mělké a hluboké kopírování je relevantní pouze pro compoundobjects (objekty, které obsahují jiné objekty, jako jsou seznamy nebo instance třídy):

  • mělké kopie vytvoří novou sloučeninu objekt a pak (na extentpossible) vloží odkazy na to, na objekty nalezené v originále.,

  • hluboká kopie vytvoří nový složený objekt a rekurzivně do něj vloží objekty nalezené v originále.

Dva problémy často existují hluboké kopírování operace, které neexistují s shallowcopy operace:

  • Rekurzivní objektů (složené objekty, přímo nebo nepřímo, obsahovat odkaz na sebe sama), může způsobit rekurzivní smyčky.

  • protože deep copy kopíruje vše, co může kopírovat příliš mnoho, například datakterý má být sdílen mezi kopiemi.,

deepcopy() funkce vyhýbá tyto problémy tím, že:

  • vedení memo slovník objektů již zkopírovali v průběhu currentcopying projít; a

  • nechat uživatelem definované třídy přepsat kopírování operace nebo sada ofcomponents kopírovat.

Tento modul nekopíruje typy, jako je modul, metoda, trasování zásobníku,rám zásobníku, soubor, zásuvka, okno, pole nebo podobné typy., To znamená „kopírovat“ funkce andclasses (mělké a hluboce), tím, že vrátí původní objekt beze změny; to je kompatibilní s tím, jak jsou ošetřeny pickle modul.

třídy mohou používat stejná rozhraní pro ovládání kopírování, které používají k controlpickling. Informace o těchto metodách naleznete v popisu modulu pickle. Modul copy používá funkce registeredpickle z modulu copyreg.,

aby třída definovala vlastní implementaci kopií, může definovatspeciální metody __copy__() a __deepcopy__(). První z nich je volánaprovádět mělkou operaci kopírování; nejsou předány žádné další argumenty.Ten je povolán k implementaci operace hluboké kopie; je předánseargument,memo slovník., Pokud __deepcopy__() provedení je hluboké kopie součásti, je třeba volat deepcopy() functionwith komponenty jako první argument a memo slovník jako druhý argument.

Viz také

modul pickle

diskuse o speciálních metodách používaných k podpoře vyhledávání stavu objektu andestoration.