logo

copiați în Python (Deep Copy și Shallow Copy)

În Piton , Declarațiile de atribuire nu copiază obiecte, ele creează legături între o țintă și un obiect. Când folosim = operator, creează doar o nouă variabilă care împărtășește referința obiectului original. Pentru a crea copii reale sau clone ale acestor obiecte, putem folosi modulul de copiere în Piton .

Sintaxa lui Python Deepcopy

Sintaxă: copy.deepcopy(x)



Sintaxa lui Python Shallowcopy

Sintaxă: copy.copy(x)

Exemplu:

Pentru a face aceste copii, folosim modulul de copiere. Copy() returnează o copie superficială a listei, iar deepcopy() returnează o copie profundă a listei. După cum puteți vedea, ambele au aceeași valoare, dar au ID-uri diferite.

Exemplu: Acest cod prezintă utilizareacopy>modul pentru a crea atât copii superficiale, cât și profunde ale unei liste imbricateli1>. O copie superficială,li2>, este creat folosind copy.copy()> , păstrând structura de nivel superior, dar partajând referințe la listele interioare. O copie profundă,li3>, este creat folosind copy.deepcopy()> , rezultând o copie complet independentă ali1>, inclusiv toate elementele imbricate. Codul imprimă ID-urile și valorileli2>șili3>, subliniind distincția dintre copiile superficiale și cele adânci în ceea ce privește referința și independența.



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)>

>

>

Ieșire:

  li2 ID:   2521878674624   Value:   [1, 2, [3, 5], 4]   li3 ID:   2521878676160   Value:   [1, 2, [3, 5], 4]>

Ce este Deep copy în Python?

O copie profundă creează un nou obiect compus înainte de a insera în el copii ale elementelor găsite în original într-o manieră recursivă. Înseamnă mai întâi construirea unui nou obiect de colecție și apoi popularea recursiv cu copii ale obiectelor copil găsite în original. În cazul copierii profunde, o copie a obiectului este copiată într-un alt obiect. Înseamnă că orice modificari făcută la o copie a obiectului nu se reflectă în obiectul original.

Copie profundă în Python

Exemplu:

În exemplul de mai sus, modificarea făcută în listă nu a afectat alte liste, indicând că lista este copiată profund.

Acest cod ilustrează copierea profundă a unei liste cu elemente imbricate folosindcopy>modul. Tipărește inițial elementele originale aleli1>, apoi deep le copiază pentru a le creali2>. O modificare a unui element dinli2>nu afecteazăli1>, după cum se demonstrează prin imprimările separate. Acest lucru evidențiază cât de multă copiere creează o copie independentă, păstrând conținutul listei originale chiar și după modificările aduse copiei.

verificarea nulă în 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>=>' '>)>

>

>

Ieșire:

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>

Ce este copierea superficială în Python?

O copie superficială creează un nou obiect compus și apoi face referire la obiectele conținute în original, ceea ce înseamnă că construiește un nou obiect de colecție și apoi îl populează cu referințe la obiectele copil găsite în original. Procesul de copiere nu se repetă și, prin urmare, nu va crea copii ale obiectelor copil în sine. În cazul copierii superficiale, o referință a unui obiect este copiată într-un alt obiect. Înseamnă că orice modificari făcută la o copie a unui obiect reflecta în obiectul original. În python, acest lucru este implementat folosind copie() funcţie.

Copie superficială în Python

Exemplu:

În acest exemplu, modificarea făcută în listă a afectat altă listă, indicând că lista este copiată superficial. Puncte importante: Diferența dintre copierea superficială și cea profundă este relevantă numai pentru obiectele compuse (obiecte care conțin alte obiecte, cum ar fi liste sau instanțe de clasă):

  • O copie superficială construiește un nou obiect compus și apoi (în măsura posibilului) inserează referințe în el la obiectele găsite în original.
  • O copie profundă construiește un nou obiect compus și apoi, recursiv, inserează în el copii ale obiectelor găsite în original.

Exemplu: Acest cod demonstrează copierea superficială a unei liste cu elemente imbricate folosind ' copy'> modul. Inițial, imprimă elementele originale aleli1>, apoi efectuează o copiere superficială înli2>. Modificarea unui element înli2>afectează elementul corespunzător înli1,>întrucât ambele liste împărtășesc referințe la listele interioare. Acest lucru ilustrează faptul că copierea superficială creează o nouă listă, dar nu oferă independență completă pentru elementele imbricate.

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>=>' '>)>

>

>

arbore avl

Ieșire:

The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>

ARTICOLE RECOMANDATE Diferența dintre copierea superficială și cea adâncă a unei clase