I Pytonorm , Tilldelningssatser kopierar inte objekt, de skapar bindningar mellan ett mål och ett objekt. När vi använder = operator, Den skapar bara en ny variabel som delar referensen för det ursprungliga objektet. För att skapa riktiga kopior eller kloner av dessa objekt kan vi använda kopieringsmodulen i Pytonorm .
Syntax för Python Deepcopy
Syntax: copy.deepcopy(x)
Syntax för Python Shallowcopy
Syntax: copy.copy(x)
Exempel:
För att göra dessa kopior använder vi kopieringsmodulen. Copy() returnerar en ytlig kopia av listan, och deepcopy() returnerar en djup kopia av listan. Som du kan se att båda har samma värde men har olika ID.
Exempel: Denna kod visar användningen avcopy>
modul för att skapa både grunda och djupa kopior av en kapslad listali1>
. En grund kopia,li2>
, skapas med hjälp av copy.copy()>
, bevara toppnivåstrukturen men dela referenser till de inre listorna. En djup kopia,li3>
, skapas med hjälp av copy.deepcopy()>
, vilket resulterar i en helt oberoende kopia avli1>
, inklusive alla kapslade element. Koden skriver ut ID:n och värden förli2>
ochli3>
, som lyfter fram skillnaden mellan grunda och djupa kopior när det gäller referens och oberoende.
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)> |
>
>
Produktion:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Vad är Deep copy i Python?
En djup kopia skapar ett nytt sammansatt objekt innan kopior av objekten som finns i originalet infogas i det på ett rekursivt sätt. Det innebär att först konstruera ett nytt samlingsobjekt och sedan rekursivt fylla det med kopior av de underordnade objekten som finns i originalet. Vid djupkopiering kopieras en kopia av objektet till ett annat objekt. Det betyder att några ändringar gjort till en kopia av föremålet reflekteras inte i originalobjektet.

Exempel:
I exemplet ovan, ändringen i listan inte påverkade andra listor, vilket indikerar att listan är djupt kopierad.
Den här koden illustrerar djupkopiering av en lista med kapslade element med hjälp avcopy>
modul. Den skriver initialt ut de ursprungliga delarna avli1>
, sedan djupkopior dem för att skapali2>
. En modifiering av ett element ili2>
påverkar inteli1>
, vilket framgår av de separata utskrifterna. Detta framhäver hur djupkopiering skapar en oberoende kopia, och bevarar originallistans innehåll även efter ändringar av kopian.
mvc för 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> => ' '> )> |
>
>
vad är struktur i datastruktur
Produktion:
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>
Vad är Shallow copy i Python?
En grund kopia skapar ett nytt sammansatt objekt och refererar sedan till objekten som finns i originalet i det, vilket innebär att det konstruerar ett nytt samlingsobjekt och sedan fyller det med referenser till de underordnade objekten som finns i originalet. Kopieringsprocessen återkommer inte och kommer därför inte att skapa kopior av de underordnade objekten själva. I fallet med ytlig kopia kopieras en referens av ett objekt till ett annat objekt. Det betyder att några ändringar gjort till en kopia av ett objekt reflektera i originalobjektet. I python implementeras detta med hjälp av kopiera() fungera.

Exempel:
I det här exemplet, ändringen i listan påverkade en annan lista, vilket indikerar att listan är ytlig kopierad. Viktiga punkter: Skillnaden mellan ytlig och djup kopiering är endast relevant för sammansatta objekt (objekt som innehåller andra objekt, som listor eller klassinstanser):
- En grund kopia konstruerar ett nytt sammansatt objekt och infogar sedan (i den mån det är möjligt) referenser i det till objekten som finns i originalet.
- En djup kopia konstruerar ett nytt sammansatt objekt och infogar sedan rekursivt kopior i det av objekten som finns i originalet.
Exempel: Den här koden visar ytlig kopiering av en lista med kapslade element med hjälp av ' copy'>
modul. Inledningsvis skriver den ut de ursprungliga delarna avli1>
, utför sedan ytlig kopiering tillli2>
. Ändra ett element ili2>
påverkar motsvarande element ili1,>
eftersom båda listorna delar referenser till de inre listorna. Detta illustrerar att ytlig kopiering skapar en ny lista, men det ger inte fullständigt oberoende för kapslade element.
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> => ' '> )> |
>
>
Produktion:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
REKOMMENDERADE ARTIKLAR – Skillnaden mellan grund och djup kopia av en klass