I Python , Oppdragssetninger kopierer ikke objekter, de skaper bindinger mellom et mål og et objekt. Når vi bruker = operatør, Den oppretter bare en ny variabel som deler referansen til det opprinnelige objektet. For å lage ekte kopier eller kloner av disse objektene kan vi bruke kopimodulen i Python .
Syntaks for Python Deepcopy
Syntaks: copy.deepcopy(x)
Syntaks for Python Shallowcopy
Syntaks: copy.copy(x)
Eksempel:
For å lage disse kopiene bruker vi kopimodulen. Copy() returnerer en grunn kopi av listen, og deepcopy() returnerer en dyp kopi av listen. Som du kan se at begge har samme verdi, men har forskjellige IDer.
Eksempel: Denne koden viser bruken avcopy>modul for å lage både grunne og dype kopier av en nestet listeli1>. En grunn kopi,li2>, er opprettet ved hjelp av copy.copy()> , bevare toppnivåstrukturen, men dele referanser til de indre listene. En dyp kopi,li3>, er opprettet ved hjelp av copy.deepcopy()> , noe som resulterer i en helt uavhengig kopi avli1>, inkludert alle nestede elementer. Koden skriver ut IDene og verdiene tilli2>ogli3>, som fremhever skillet mellom grunne og dype kopier når det gjelder referanse og uavhengighet.
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)> |
>
>
Produksjon:
li2 ID: 2521878674624 Value: [1, 2, [3, 5], 4] li3 ID: 2521878676160 Value: [1, 2, [3, 5], 4]>
Hva er Deep copy i Python?
En dyp kopi oppretter et nytt sammensatt objekt før kopier av gjenstandene som finnes i originalen settes inn i det på en rekursiv måte. Det betyr først å konstruere et nytt samlingsobjekt og deretter rekursivt fylle det med kopier av de underordnede objektene som finnes i originalen. Ved dyp kopi kopieres en kopi av objektet til et annet objekt. Det betyr at noen endringer laget til en kopi av objektet ikke reflekteres i det originale objektet.
Eksempel:
I eksemplet ovenfor, endringen gjort i listen ikke påvirket andre lister, noe som indikerer at listen er dypt kopiert.
Denne koden illustrerer dyp kopiering av en liste med nestede elementer ved hjelp avcopy>modul. Den skriver først ut de originale elementene avli1>, deretter dypkopier dem for å lageli2>. En modifikasjon av et element ili2>påvirker ikkeli1>, som vist i de separate utskriftene. Dette fremhever hvordan dyp kopiering skaper en uavhengig kopi, og bevarer innholdet i den originale listen selv etter endringer i kopien.
strengsammenkobling
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>=>' '>)> |
>
>
Produksjon:
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>
Hva er Shallow copy i Python?
En grunn kopi oppretter et nytt sammensatt objekt og refererer deretter til objektene som finnes i originalen i det, noe som betyr at det konstruerer et nytt samlingsobjekt og deretter fyller det med referanser til de underordnede objektene som finnes i originalen. Kopieringsprosessen gjentar seg ikke og vil derfor ikke lage kopier av underordnede objekter selv. Ved grunne kopier kopieres en referanse til et objekt til et annet objekt. Det betyr at noen endringer laget til en kopi av et objekt reflektere i det opprinnelige objektet. I python implementeres dette ved hjelp av kopiere() funksjon.
Eksempel:
I dette eksemplet er endringen gjort i listen påvirket en annen liste, som indikerer at listen er grunt kopiert. Viktige punkter: Forskjellen mellom grunn og dyp kopiering er bare relevant for sammensatte objekter (objekter som inneholder andre objekter, som lister eller klasseforekomster):
- En grunn kopi konstruerer et nytt sammensatt objekt og setter deretter (i den grad det er mulig) inn referanser til objektene som finnes i originalen.
- En dyp kopi konstruerer et nytt sammensatt objekt og setter deretter, rekursivt, inn kopier av objektene som finnes i originalen.
Eksempel: Denne koden demonstrerer grunn kopiering av en liste med nestede elementer ved å bruke ' copy'> modul. I utgangspunktet skriver den ut de originale elementene avli1>, og utfører deretter grunn kopiering tilli2>. Endre et element ili2>påvirker det tilsvarende elementet ili1,>da begge listene deler referanser til de indre listene. Dette illustrerer at grunn kopiering skaper en ny liste, men det gir ikke fullstendig uavhengighet for nestede elementer.
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>=>' '>)> |
binært søk i java
>
>
Produksjon:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
ANBEFALT ARTIKLER – Forskjellen mellom grunn og dyp kopi av en klasse