Forrige Kapittel: Sett og Frosne Sett
Neste Kapittel: Funksjoner

Grunt og Dypt Kopi

Innledning


Som vi har sett i kapittel «Typer Data og Variabler», Python har en merkelig oppførsel – i sammenligning med andre programmeringsspråk – når du tilordner og kopiere enkle datatyper som heltall og strenger. Forskjellen mellom grunt og dypt kopiering er bare relevant for sammensatte objekter, som er objekter som inneholder andre objekter, slik som lister eller klasse tilfeller.,
I følgende kodebit y peker til samme sted i minnet enn X. Dette endrer seg når vi tilordne en annen verdi for y. I dette tilfellet y vil motta et separat sted i minnet, som vi har sett i kapittel «Typer Data og Variabler».

>>> x = 3>>> y = x

Men selv om denne interne fremstår som merkelig i forhold til programmeringsspråk som C, C++ og Perl, men det observerbare resultatet av oppgaver besvare våre forventninger. Men det kan være problematisk, hvis vi kopierer foranderlig objekter som lister og ordbøker.
Python skaper ekte kopier bare hvis det har å, dvs., hvis brukeren, programmerer, uttrykkelig krever det.
Vi vil introdusere deg til den mest avgjørende problemer, som kan oppstå når du kopierer foranderlig objekter, jeg.e.når du kopierer lister og ordbøker.

Kopiere en liste

>>> colours1 = >>> colours2 = colours1>>> colours2 = >>> print colours1

I eksemplet ovenfor en enkel liste er tilordnet til colours1. I neste trinn vil vi tildele colour1 å colours2. Etter dette, en ny liste er tilordnet til colours2.
Som vi har forventet, verdiene av colours1 forble uendret., Som det var i vår examplein kapitlet «typer Data og variabler», et nytt sted i minnet hadde vært bevilget for colours2, fordi vi har tilordnet en komplett ny liste til denne variabelen.

>>> colours1 = >>> colours2 = colours1>>> colours2 = "blue">>> colours1

Men spørsmålet er, hva som vil skje hvis vi endrer et element i listen over colours2 eller colours1?
I eksempelet ovenfor, kan vi tilordne en ny verdi til det andre elementet i colours2. Mange nybegynnere vil bli forbauset at listen over colours1 har vært «automatisk» endra.,
forklaring er at det har vært noe nytt oppdrag for å colours2, bare til en av dens elementer.

Kopier med Slice Operatør

Det er mulig å fullstendig kopi grunne liste strukturer med slice operatør uten å ha noen av bivirkningene, som vi har beskrevet ovenfor:

>>> list1 = >>> list2 = list1>>> list2 = 'x'>>> print list2>>> print list1>>> 

Men så snart en liste inneholder underlister, har vi samme problem, dvs. bare pekere til thesublists.,

>>> lst1 = ]>>> lst2 = lst1

Denne atferden er vist i følgende diagram:

Hvis du tilordne en ny verdi til 0th Element i en av de to listene, vil det ikke være noen bivirkning. Oppstår det problemer hvis du endrer ett av elementene i den underliste.

>>> lst1 = ]>>> lst2 = lst1>>> lst2 = 'c'>>> lst2 = 'd'>>> print(lst1)]

følgende diagram viser hva skjer, hvis ett av elementene i en underliste vil være endret: Både innhold av lst1 og lst2 er endret.,

ved Hjelp av den Metoden deepcopy fra Modulen kopi

En løsning på det beskrevet problemer er å bruke modulen «kopi». Denne modulen gir metoden «kopier», noe som gir en fullstendig kopi ofa vilkårlig liste, dvs. grunne og andre lister.
følgende skript bruker vårt eksempel ovenfor, og denne metoden:

from copy import deepcopylst1 = ]lst2 = deepcopy(lst1)lst2 = "d"lst2 = "c";print lst2print lst1

Hvis vi vil lagre dette skriptet under navnet deep_copy.py og hvis vi kaller skriptet med «python deep_copy.,py», vil vi få følgende resultat:

$ python deep_copy.py ]]

Forrige Kapittel: Sett og Frosne Sett
Neste Kapittel: Funksjoner

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *