W Pyton Instrukcje przypisania nie kopiują obiektów, lecz tworzą powiązania pomiędzy celem i obiektem. Kiedy używamy = operator, tworzy jedynie nową zmienną, która ma wspólne odwołanie do oryginalnego obiektu. Aby stworzyć prawdziwe kopie lub klony tych obiektów, możemy skorzystać z modułu kopiowania w Pyton .
Składnia Pythona Deepcopy
Składnia: kopia.głęboka kopia(x)
Składnia Pythona Shallowcopy
Składnia: kopia.kopia(x)
Przykład:
Do wykonania tych kopii wykorzystujemy moduł kopiowania. Funkcja copy() zwraca płytką kopię listy, a deepcopy() zwraca głęboką kopię listy. Jak widać, oba mają tę samą wartość, ale mają różne identyfikatory.
Przykład: Ten kod przedstawia użyciecopy>
moduł do tworzenia zarówno płytkich, jak i głębokich kopii zagnieżdżonej listyli1>
. Płytki egzemplarz,li2>
, jest tworzony przy użyciu copy.copy()>
, zachowując strukturę najwyższego poziomu, ale udostępniając odniesienia do list wewnętrznych. Głęboki egzemplarz,li3>
, jest tworzony przy użyciu copy.deepcopy()>
, co daje całkowicie niezależną kopięli1>
, łącznie ze wszystkimi zagnieżdżonymi elementami. Kod wypisuje identyfikatory i wartościli2>
Ili3>
, podkreślając różnicę między kopiami płytkimi i głębokimi pod względem odniesienia i niezależności.
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'li2 ID: '> ,> id> (li2),> 'Value: '> , li2)> li3> => copy.deepcopy(li1)> print> (> 'li3 ID: '> ,> id> (li3),> 'Value: '> , li3)> |
>
>
Wyjście:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Co to jest głęboka kopia w Pythonie?
Głęboka kopia tworzy nowy obiekt złożony przed wstawieniem do niego kopii elementów znalezionych w oryginale w sposób rekurencyjny. Oznacza to najpierw skonstruowanie nowego obiektu kolekcji, a następnie rekurencyjne wypełnienie go kopiami obiektów podrzędnych znalezionych w oryginale. W przypadku głębokiej kopii kopia obiektu jest kopiowana do innego obiektu. To znaczy, że jakieś zmiany wykonane na kopię obiektu nie odbijają się w oryginalnym obiekcie.

Przykład:
W powyższym przykładzie zmiana dokonana na liście nie miało wpływu inne listy, wskazując, że lista została głęboko skopiowana.
Ten kod ilustruje głębokie kopiowanie listy z zagnieżdżonymi elementami przy użyciu metodycopy>
moduł. Początkowo drukuje oryginalne elementyli1>
, a następnie głęboko je kopiuje i tworzyli2>
. Modyfikacja elementu wli2>
nie ma wpływuli1>
jak wynika z odrębnych wydruków. Podkreśla to, jak głębokie kopiowanie tworzy niezależną kopię, zachowując zawartość oryginalnej listy nawet po wprowadzeniu zmian w kopii.
int na char Java
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.deepcopy(li1)> print> (> 'The original elements before deep copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The new list of elements after deep copying '> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li2[i],end> => ' '> )> print> (> '
'> )> print> (> 'The original elements after deep copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
>
>
Wyjście:
The original elements before deep copying 1 2 [3, 5] 4 The new list of elements after deep copying 1 2 [7, 5] 4 The original elements after deep copying 1 2 [3, 5] 4>
Co to jest płytka kopia w Pythonie?
Płytka kopia tworzy nowy obiekt złożony, a następnie odwołuje się do obiektów zawartych w oryginale, co oznacza, że konstruuje nowy obiekt kolekcji, a następnie wypełnia go odniesieniami do obiektów podrzędnych znalezionych w oryginale. Proces kopiowania nie jest powtarzalny i dlatego nie tworzy kopii samych obiektów podrzędnych. W przypadku płytkiej kopii odniesienie do obiektu jest kopiowane do innego obiektu. To znaczy, że jakieś zmiany wykonane na kopię obiektu zastanów się w oryginalnym obiekcie. W Pythonie jest to realizowane za pomocą Kopiuj() funkcjonować.

Przykład:
W tym przykładzie zmiana dokonana na liście wpłynęło inną listę, wskazując, że lista została płytko skopiowana. Ważne punkty: Różnica między płytkim i głębokim kopiowaniem dotyczy tylko obiektów złożonych (obiektów zawierających 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 niej 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.
Przykład: Ten kod demonstruje płytkie kopiowanie listy z zagnieżdżonymi elementami przy użyciu metody ' copy'>
moduł. Początkowo drukuje oryginalne elementyli1>
, a następnie wykonuje płytkie kopiowanie doli2>
. Modyfikowanie elementu wli2>
wpływa na odpowiedni element wli1,>
ponieważ obie listy mają wspólne odniesienia do list wewnętrznych. To pokazuje, że płytkie kopiowanie tworzy nową listę, ale nie zapewnia całkowitej niezależności zagnieżdżonych elementów.
Python3
import> copy> li1> => [> 1> ,> 2> , [> 3> ,> 5> ],> 4> ]> li2> => copy.copy(li1)> print> (> 'The original elements before shallow copying'> )> for> i> in> range> (> 0> ,> len> (li1)):> > print> (li1[i],end> => ' '> )> print> (> '
'> )> li2[> 2> ][> 0> ]> => 7> print> (> 'The original elements after shallow copying'> )> for> i> in> range> (> 0> ,> len> ( li1)):> > print> (li1[i],end> => ' '> )> |
przechodzenie przez pocztę
>
>
Wyjście:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
POLECANE ARTYKUŁY – Różnica między płytką i głęboką kopią klasy