I Python , Opgavesætninger kopierer ikke objekter, de skaber bindinger mellem et mål og et objekt. Når vi bruger = operator, Den opretter kun en ny variabel, der deler referencen til det originale objekt. For at skabe rigtige kopier eller kloner af disse objekter, kan vi bruge kopimodulet i Python .
Syntaks for Python Deepcopy
Syntaks: copy.deepcopy(x)
Syntaks for Python Shallowcopy
Syntaks: copy.copy(x)
Eksempel:
For at lave disse kopier bruger vi kopimodulet. Copy() returnerer en lav kopi af listen, og deepcopy() returnerer en dyb kopi af listen. Som du kan se, har begge den samme værdi, men har forskellige ID'er.
Eksempel: Denne kode viser brugen afcopy>modul til at skabe både overfladiske og dybe kopier af en indlejret listeli1>. En overfladisk kopi,li2>, er oprettet ved hjælp af copy.copy()> , bevare strukturen på øverste niveau, men dele referencer til de indre lister. En dyb kopi,li3>, er oprettet vha copy.deepcopy()> , hvilket resulterer i en fuldstændig uafhængig kopi afli1>, inklusive alle indlejrede elementer. Koden udskriver ID'er og værdier forli2>ogli3>, der fremhæver sondringen mellem overfladiske og dybe kopier med hensyn til reference og uafhængighed.
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]>
Hvad er Deep copy i Python?
En dyb kopi opretter et nyt sammensat objekt, før kopier af de elementer, der findes i originalen, indsættes i det på en rekursiv måde. Det betyder først at konstruere et nyt samlingsobjekt og derefter rekursivt udfylde det med kopier af de underordnede objekter fundet i originalen. I tilfælde af dyb kopi kopieres en kopi af objektet til et andet objekt. Det betyder at eventuelle ændringer lavet til en kopi af objektet ikke afspejles i det originale objekt.
Eksempel:
I ovenstående eksempel er ændringen foretaget i listen ikke påvirkede andre lister, hvilket indikerer, at listen er dybt kopieret.
Denne kode illustrerer dyb kopiering af en liste med indlejrede elementer ved hjælp afcopy>modul. Det udskriver i første omgang de originale elementer afli1>, og derefter dybe kopier dem for at opretteli2>. En ændring af et element ili2>påvirker ikkeli1>, som vist på de separate udskrifter. Dette fremhæver, hvordan dyb kopiering skaber en uafhængig kopi, der bevarer den originale listes indhold, selv efter ændringer af kopien.
java cast int til streng
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>=>' '>)> |
>
>
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>
Hvad er Shallow copy i Python?
En overfladisk kopi opretter et nyt sammensat objekt og refererer derefter til objekterne i originalen i det, hvilket betyder, at det konstruerer et nyt samlingsobjekt og derefter udfylder det med referencer til de underordnede objekter, der findes i originalen. Kopieringsprocessen gentager sig ikke og vil derfor ikke selv oprette kopier af de underordnede objekter. I tilfælde af overfladisk kopi kopieres en reference til et objekt til et andet objekt. Det betyder at eventuelle ændringer lavet til en kopi af et objekt reflektere i det originale objekt. I python implementeres dette ved hjælp af kopi() fungere.
Eksempel:
I dette eksempel er ændringen i listen påvirkede en anden liste, hvilket indikerer, at listen er overfladisk kopieret. Vigtige punkter: Forskellen mellem overfladisk og dyb kopiering er kun relevant for sammensatte objekter (objekter, der indeholder andre objekter, såsom lister eller klasseforekomster):
- En overfladisk kopi konstruerer et nyt sammensat objekt og indsætter derefter (i det omfang det er muligt) referencer i det til de objekter, der findes i originalen.
- En dyb kopi konstruerer et nyt sammensat objekt og indsætter derefter, rekursivt, kopier af objekterne fundet i originalen.
Eksempel: Denne kode demonstrerer overfladisk kopiering af en liste med indlejrede elementer ved hjælp af ' copy'> modul. I første omgang udskriver den de originale elementer afli1>, og udfører derefter overfladisk kopiering tilli2>. Ændring af et element ili2>påvirker det tilsvarende element ili1,>da begge lister deler referencer til de indre lister. Dette illustrerer, at overfladisk kopiering skaber en ny liste, men det giver ikke fuldstændig uafhængighed for indlejrede 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>=>' '>)> |
java streng til heltal
>
>
Produktion:
The original elements before shallow copying 1 2 [3, 5] 4 The original elements after shallow copying 1 2 [7, 5] 4>
ANBEFALEDE ARTIKLER – Forskellen mellem Shallow og Deep copy af en klasse