Innledning
I denne opplæringen, vi kommer til å diskutere grunne kopier vs dyp kopier ved hjelp av eksempler i Python. Vi vil dekke definisjonen av et dypt og grunt kopiere, sammen med dets implementering i Python språk for å vurdere kjernen forskjeller mellom de to typer av kopier.
I mange av de programmene som vi skriver, uansett hvor grunnleggende de er, kan vi ende opp med å måtte kopiere en liste eller et objekt for en av mange årsaker, som computational effektivitet., Det er to måter å gjøre det, enten lage en dyp kopi eller en grunn kopi. Før vi diskuterer forskjellene mellom de to, la oss først forstå hva dypt og grunt kopier akkurat er.
Dypt Kopier i Python
En dyp kopi gjør en ny og separat kopi av en hel objekt eller en liste med sin egen unike minneadresse. Hva dette betyr er at alle endringer du gjør i ny kopi av objektet/listen vil ikke reflektere i den opprinnelige. Denne prosessen skjer ved først å opprette en ny liste eller objekt, etterfulgt av undermapper å kopiere elementer fra den originale til den nye.,
for Å si det kort, både av objektene som er helt uavhengige av hverandre. Dette er det samme begrepet som passerer verdien i språk som C++, Java og C#.
Dyp Kopi Eksempel
for Å implementere konseptet med dype kopier i Python, som vi vil bruke kopi-modul.
La oss si at vi har en liste av lister kalt result_A
, som inneholder karakterer av En student i 3 fag for de to første årene på skolen, og vi ønsker å lage en nøyaktig lik listen over resultater for elev B også., Vi skal prøve og gjøre en dyp kopi av result_A
liste, og gjøre noen endringer i det dype kopier senere for å vise karakterene av student B.
Eksempel 1:
I skriptet ovenfor, vi bruker deepcopy
metode fra copy
modulen for å kopiere listen result_A
til result_B
. Neste, vi skriver ut innholdet av begge listene på skjermen.
Output:
, ], ]
Som du kan se, listene er identiske. Senere i denne artikkelen vil vi se på hvordan dette er forskjellig fra grunt kopier.,
Grunne Kopier i Python
En grunn kopi gjør også en ny, separat objekt objekt eller en liste, men i stedet for å kopiere barnet elementer til den nye objekt, er det bare å kopiere referanser til deres minne-postadresser. Derfor, hvis du gjør en endring i det opprinnelige objektet, det ville reflektere i det kopierte objektet, og vice versa. For å si det kort, begge kopiene er avhengige av hverandre. Dette er det samme begrepet som passerer inn ved referanse i programmeringsspråk som C++, C# og Java.,
Grunne Kopi Eksempel
for Å implementere dette i Python, vil vi bruke copy
modulen igjen, men denne gang vil vi kalle sin copy
funksjon.
La oss bruke det samme eksemplet listen for grunt kopi eksempel som godt.
Eksempel 2:
# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)
I skriptet ovenfor, kan vi bruke copy
metode fra copy
modulen for å gjøre en liten kopi av liste result_A
som vi kalte result_B
., Neste, innholdet i begge listene har blitt skrevet ut på konsollen.
Output:
, ], ]
Igjen, listene er den samme, som forventet. Neste vi skal forklare forskjellen mellom resultatene vi får fra copy
og deepcopy
funksjoner.
Forskjellen Mellom Dypt og Grunt Kopier
Nå som vi har diskutert hva grunt og dypt kopier er og hvorfor vi lage kopier, det er på tide å snakke om forskjellen mellom dem., I hovedsak, det er bare to core forskjeller, og de er forbundet med hverandre:
- Dyp kopi lagrer kopier av et objekt verdier, mens grunne kopi historier referanser til den opprinnelige minne adresse
- Dyp kopi reflekterer ikke endringer som er gjort til den nye/kopierte objektet i den opprinnelige objektet, mens, grunne kopi gjør
Før vi går videre til gjennomføringen, Jeg vil at du skal se for deg dette scenarioet. La oss si at to personer som ønsker å dele en drink, de har to tomme glassene og to sugerør., De kan dele denne drink på to måter:
- Legg drikke i ett glass, og sett både sugerør i glass for at du deler
- Sette glass i både glass, og legg ett strå i hvert glass
Det første scenariet er det av en grunn kopi. Begge variablene/forekomster peker/bruker samme sted i minnet for sin virksomhet. Det andre scenariet er at av en dyp kopi. Begge variablene/forekomster peker til/ved hjelp av to forskjellige minne steder for deres virksomhet.,
Sammenligningen Eksempel
for Å gjøre den forskjellen klart, la oss bruke denne informasjonen i våre to ovennevnte eksemplene, og starter med Eksempel 1.
Over, har vi laget listen result_A
og laget en dyp kopi av det som heter result_B
. La oss prøve å endre innholdet i result_B
og se om det har noen effekt på innholdet av result_A
.
Output:
Original List:, ]Deep Copy:, ]
forventet resultat er at den opprinnelige listen forblir uendret., Og som du kan se, endringer i dyp kopi ikke påvirke den opprinnelige listen.
Nå kan du prøve det samme med Eksempel 2 – Grunt Kopi.
Output:
Original List:, ]Shallow Copy:, ]
Her forventet resultat er at både den opprinnelige listen, og kopierte listen er endret etter én endring. Og som du kan se, å gjøre endringen til grunn kopi resulterte i at endringer er reflektert i den opprinnelige listen som godt.
Konklusjon
I dette innlegget, vi snakket om hva en grunn og en dyp kopi er og hvordan vi kan gjøre dem i Python språk ved å bruke ‘kopier’ modul., Vi brukte to av sine funksjoner, dvs. copy
og deepcopy
for å gjøre grunt og dypt kopier, henholdsvis. Videre diskuterte vi to core forskjeller mellom en grunn og en dyp kopi, og også implementert på grunt og dypt kopi i python for å forstå disse forskjellene på en bedre måte.