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