Indledning
I denne tutorial, vil vi diskutere lavvandede kopier vs dybt kopier ved hjælp af eksempler i Python. Vi vil dække definitionen af en dyb og lav kopi sammen med dens implementering på Python-sproget for at evaluere kerneforskellene mellem de to typer kopier.
i mange af de programmer, vi skriver, uanset hvor grundlæggende de er, ender vi med at kopiere en liste eller et objekt af en af mange grunde, som beregningseffektivitet., Der er to måder at gøre det på, enten lav en dyb kopi eller en lav kopi. Før vi diskuterer forskellene mellem de to, lad os først forstå, hvad dybe og overfladiske kopier nøjagtigt er.
dybe kopier i Python
en dyb kopi laver en ny og separat kopi af et helt objekt eller en liste med sin egen unikke hukommelsesadresse. Hvad dette betyder er, at eventuelle ændringer, du foretager i den nye kopi af objektet/listen, ikke afspejler i den originale. Denne proces sker ved først at oprette en ny liste eller et objekt efterfulgt af rekursivt at kopiere elementerne fra den originale til den nye.,
for at sige det kort, er begge objekter helt uafhængige af hinanden. Dette svarer til begrebet forbipasserende værdi på sprog som C++, Java og C#.
Deep Copy eksempel
for at implementere begrebet deep copies i Python bruger vi copy-modulet.
lad os sige, at vi har en liste over lister kaldet result_A
, som indeholder karakterer af studerende A i 3 fag i de første to år af skolen, og vi ønsker også at oprette en nøjagtigt lignende liste over resultater for studerende B., Vi vil forsøge at lave en dyb kopi af result_A
liste, og laver et par ændringer i dyb kopi til senere at vise de kvaliteter af studerende B.
Eksempel 1:
I ovenstående script, vi bruger deepcopy
metode fra copy
modul til at kopiere listen result_A
til result_B
. Dernæst udskriver vi indholdet af begge lister på skærmen.
Output:
, ], ]
som du kan se, er listerne identiske. Senere i denne artikel vil vi se, hvordan dette adskiller sig fra overfladiske kopier.,
Shallo.kopier i Python
en shallo. kopi gør også et separat nyt objektobjekt eller en liste, men i stedet for at kopiere barnets elementer til det nye objekt kopierer det simpelthen referencerne til deres hukommelsesadresser. Derfor, hvis du foretager en ændring i det originale objekt, vil det afspejle sig i det kopierede objekt og omvendt. For at sige det kort, er begge kopier afhængige af hinanden. Dette svarer til begrebet forbipasserende reference i programmeringssprog som C++, C# og Java.,
Shallo.Copy eksempel
for at implementere dette i Python bruger vicopy
modul igen, men denne gang kalder vi denscopy
funktion.
lad os også bruge den samme eksempelliste til det lave kopieksempel.
Eksempel 2:
# Program 2 - Shallow Copyimport copyresult_A = , ]result_B = copy.copy(result_A)print(result_A)print(result_B)
I ovenstående script, vi bruger copy
metode fra copy
modul til at lave en overfladisk kopi af liste – result_A
, som vi har navngivet result_B
., Dernæst er indholdet af begge lister trykt på konsollen.
Output:
, ], ]
igen er listerne de samme som forventet. Dernæst forklarer vi forskellen mellem de resultater, vi får fra copy
og deepcopy
funktioner.
forskel mellem dybe og lave kopier
nu hvor vi har diskuteret, hvad lavvandede og dybe kopier er, og hvorfor vi opretter kopier, er det tid til at tale om forskellen mellem dem., Det væsentlige, der er blot to centrale forskelle, og de er forbundet med hinanden:
- Dyb kopi gemmer kopier af et objekts værdier, der henviser til, at overfladisk kopi historier henvisninger til den oprindelige hukommelse adresse
- Dyb kopi afspejler ikke ændringer til det nye/kopieret objekt i den oprindelige objekt; der henviser til, overfladisk kopi gør
Før vi går videre til gennemførelsen, Jeg vil gerne have dig til at forestille dig dette scenarie. Lad os sige, at to mennesker ønsker at dele en drink; de har to tomme glas og to strå., De kan dele denne drink på to måder:
- Sæt drink i et glas, og sætte både sugerør i glasset for at dele
- Sæt drink i både briller, og sætte den ene halm i hvert glas
Det første scenarie er, at en overfladisk kopi. Begge variabler / forekomster peger / bruger den samme hukommelsesplacering til deres operationer. Det andet scenario er en dyb kopi. Begge variabler / forekomster peger på / ved hjælp af to forskellige hukommelsessteder for deres operationer.,
Sammenligningseksempel
for at gøre forskellen klar, lad os bruge disse oplysninger i vores ovenstående to eksempler, startende med eksempel 1.
ovenfor oprettede vi listenresult_A
og lavede en dyb kopi af den med navnetresult_B
. Lad os prøve at ændre indholdet i result_B
og se om det har nogen effekt på indholdet af result_A
.Output:
Original List:, ]Deep Copy:, ]
det forventede resultat er, at den oprindelige liste forbliver uændret., Og som du kan se, påvirker ændringer i den dybe kopi ikke den oprindelige liste.
lad os nu prøve det samme med eksempel 2 – Shallo.Copy.Output:
Original List:, ]Shallow Copy:, ]
Her er det forventede resultat, at både den oprindelige liste og den kopierede liste ændres efter den enkelte ændring. Og som du kan se, at foretage ændringen til den lave kopi resulterede i, at ændringen også afspejles i den originale liste.
konklusion
i dette indlæg talte vi om, hvad en lav og en dyb kopi er, og hvordan vi kan gøre dem på Python-sprog ved hjælp af ‘copy’ – modulet., Vi brugte to af dens funktioner, dvs. copy
og deepcopy
til at lave henholdsvis lavvandede og dybe kopier. Endvidere drøftede vi de to centrale forskelle mellem en overfladisk og en dyb kopi, og også gennemført, overfladisk og dyb kopi i python til at forstå disse forskelle på en bedre måde.