Python Grunne Kopiere og Dyp Kopi
Kopiere et Objekt i Python
I Python, bruker vi =
– operatoren for å opprette en kopi av et objekt. Du tror kanskje at dette oppretter et nytt objekt; det gjør den ikke. Det skaper bare en ny variabel som deler referanse til det originale objektet.
La oss ta et eksempel der vi lage en liste som heter old_list og passere et objekt referanse til new_list ved hjelp av =
operatør.,
Eksempel 1: Kopiere ved hjelp = operatør
Når vi kjører over programmet, produksjonen vil være:
Old List: , , ]ID of Old List: 140673303268168New List: , , ]ID of New List: 140673303268168
Som du kan se fra utgang begge variablene old_list og new_list deler den samme id-en jeg.e 140673303268168
.
Så, hvis du ønsker å endre noen verdier i new_list eller old_list, endringen er synlig i begge.
Egentlig, noen ganger ønsker du kanskje å ha den opprinnelige verdiene uendret og bare endre den nye verdier eller vice versa., I Python er det to måter å lage kopier:
- Grunne Kopi
- Dyp Kopi
for Å gjøre disse kopiere arbeid, bruker vi copy
modulen.
Kopier Modulen
Vi bruke copy
Python-modul for grunt og dypt kopi operasjoner. La oss anta at du trenger å kopiere sammensatte liste si x. For eksempel:
import copycopy.copy(x)copy.deepcopy(x)
Her copy()
gå en liten kopi av x. På samme måte, deepcopy()
tilbake en dyp kopi av x.,
Grunne Kopi
En grunn kopi oppretter et nytt objekt som lagrer referansen av de opprinnelige elementene.
Så, en grunn kopi ikke lage en kopi av nestede objekter, i stedet er det bare kopier som referanse for nestede objekter. Dette betyr, en kopi prosessen ikke recurse eller lage kopier av nestede objekter i seg selv.,
Eksempel 2: Opprett en kopi ved hjelp av grunne kopi
import copyold_list = , , ]new_list = copy.copy(old_list)print("Old list:", old_list)print("New list:", new_list)
Når vi kjører programmet , vil effekten være:
Old list: , , ]New list: , , ]
I ovennevnte program, laget vi en kjedet liste og deretter grunne kopiere det ved hjelp av copy()
metode.
Dette betyr at det vil skape ny og uavhengig objekt med samme innhold. For å kontrollere dette, kan vi skrive ut både old_list og new_list.,
for Å bekrefte at new_list er forskjellig fra old_list, vi prøver å legge til nye nestede objekt til originale og sjekke det.
Eksempel 3: Legge til old_list, ved hjelp av grunne kopi
Når vi kjører programmet, vil det utgang:
Old list: , , , ]New list: , , ]
I ovennevnte program, laget vi en liten kopi av old_list. Den new_list inneholder referanser til opprinnelige nestede objekter som er lagret i old_list. Deretter legger vi på den nye listen jeg.e i old_list., Denne nye underliste ikke ble kopiert i new_list.
når du Imidlertid endre noen nestede objekter i old_list, endringene vises i new_list.
Eksempel 4: Legge til nye nestede objekt ved hjelp av Grunne kopi
import copyold_list = , , ]new_list = copy.copy(old_list)old_list = 'AA'print("Old list:", old_list)print("New list:", new_list)
Når vi kjører programmet, vil det utgang:
Old list: , , ]New list: , , ]
Dyp Kopi
En dyp kopi oppretter et nytt objekt, og undermapper legger kopier av nestede objekter til stede i den opprinnelige elementer.
La oss fortsette med eksempel 2., Men, vi kommer til å lage dype kopiere ved hjelp av deepcopy()
funksjonen til stede i copy
modulen. Den dype kopi skaper uavhengig kopi av det originale objektet og alle dens nestede objekter.
Eksempel 5: Kopiering ved hjelp av en liste deepcopy()
import copyold_list = , , ]new_list = copy.deepcopy(old_list)print("Old list:", old_list)print("New list:", new_list)
Når vi kjører programmet, vil det utgang:
Old list: , , ]New list: , , ]
I ovennevnte program, bruker vi deepcopy()
funksjon for å lage kopier som ligner.,
hvis du Imidlertid gjøre endringer til hvilken som helst nestede objekter i original-objektet old_list, vil du ikke endringer i kopi new_list.
Eksempel 6: Legge til en ny nestede objekt i listen ved hjelp av Dyp kopi
Når vi kjører programmet, vil det utgang:
Old list: , , ]New list: , , ]
I ovennevnte program, når vi tilordne en ny verdi til old_list, vi kan bare se old_list er endret. Dette betyr, både old_list og new_list er uavhengige. Dette er fordi old_list var undermapper kopieres, som er sann for alle sine nestes objekter.