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 vicopymodul 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:

  1. Dyb kopi gemmer kopier af et objekts værdier, der henviser til, at overfladisk kopi historier henvisninger til den oprindelige hukommelse adresse
  2. 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:

  1. Sæt drink i et glas, og sætte både sugerør i glasset for at dele
  2. 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.