logo

kopiuj w Pythonie (głęboka kopia i płytka kopia)

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.

Głęboka kopia w Pythonie

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

Płytka kopia w Pythonie

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