kod źródłowy: Lib/copy.py

polecenia Assignment w Pythonie nie kopiują obiektów, tworzą bindingsbet between a target and a object. W przypadku kolekcji, które są zmiennymi lub zawierającymi elementy, czasami potrzebna jest kopia, aby można było zmienić jedną kopię bez zmiany drugiej. Moduł ten zapewnia ogólne kopiowanie płytkie i głębokie (opisane poniżej).

podsumowanie interfejsu:

copy.copy(x)¶

zwraca płytką kopię x.,

copy.deepcopy(x)¶

zwraca głęboką kopię x.

wyjątekcopy.error

podniesiony dla błędów specyficznych dla modułów.

różnica między kopiowaniem płytkim i głębokim jest istotna tylko dla obiektów compoundobjects (obiektów, które zawierają inne obiekty, takie jak listy lub instancje klas):

  • płytka Kopia konstruuje nowy obiekt złożony, a następnie (w miarę możliwości) wstawia do niego odniesienia do obiektów znalezionych w oryginale.,

  • głęboka Kopia konstruuje nowy obiekt złożony, a następnie rekurencyjnie wstawia do niego kopie obiektów znalezionych w oryginale.

często występują dwa problemy z operacjami głębokiego kopiowania, które nie istnieją przy operacjach shallowcopy:

  • obiekty rekurencyjne (obiekty złożone, które bezpośrednio lub pośrednio zawierają odniesienie do siebie) mogą powodować pętlę rekurencyjną.

  • ponieważ deep copy kopiuje wszystko, co może kopiować za dużo, np. dane, które mają być udostępniane między kopiami.,

funkcjadeepcopy() unika tych problemów przez:

  • zachowującmemo słownik obiektów już skopiowanych podczas bieżącego procesu kopiowania; i

  • pozwalając definiowanym przez użytkownika klasom zastąpić operację kopiowania lub zestaw ofcomponents copied.

Ten moduł nie kopiuje typów takich jak moduł, metoda, śledzenie stosu, ramka stosu, plik, Gniazdo, okno, tablica lub podobne typy., Wykonuje” kopiowanie ” funkcji i klas (płytko i głęboko), zwracając oryginalny obiekt bez zmian; jest to zgodne ze sposobem, w jaki są one traktowane przez moduł pickle.

klasy mogą używać tych samych interfejsów do sterowania kopiowaniem, których używają do controlpickling. Zobacz opis modułu pickle aby uzyskać informacje na temat tych metod. W rzeczywistości moduł copy wykorzystuje funkcje registeredpickle z modułu copyreg.,

aby Klasa mogła zdefiniować własną implementację kopii, może definiować specjalne metody __copy__()oraz __deepcopy__(). Pierwszy z nich nazywa się zaimplementowaniem operacji kopiowania płytkiego; nie są przekazywane żadne dodatkowe argumenty.Ten ostatni jest wywoływany do implementacji operacji głębokiego kopiowania; przekazywany jest on przez słownik memo., Jeśli implementacja__deepcopy__() musi wykonać głęboką kopię komponentu, powinna wywołać funkcję deepcopy() z komponentem jako pierwszym argumentem i słownikiem memo jako drugim argumentem.

patrz również

modułpickle

omówienie specjalnych metod używanych do obsługi wyszukiwania stanu obiektów i ich usuwania.