Gå til innhold

Hvorfor kopieres ikke listen med liste[:]?


Anbefalte innlegg

For å si det kort:

 

>>> a = [[1, 2], [3, 4]]
>>> b = a[:]
>>> a[0][0] = 0
>>> print b
[[0, 2], [3, 4]]

 

Hvorfor forandres listen b når den (i følge alt jeg finner på nett) skal være en ren kopi av a?

 

Har jeg misforstått noe?

Endret av HolgerLudvigsen
Lenke til kommentar
Videoannonse
Annonse
For å si det kort:

 

>>> a = [[1, 2], [3, 4]]
>>> b = a[:]
>>> a[0][0] = 0
>>> print b
[[0, 2], [3, 4]]

 

Hvorfor forandres listen b når den (i følge alt jeg finner på nett) skal være en ren kopi av a?

 

Har jeg misforstått noe?

7100980[/snapback]

 

 

Du har fått svar ;-) Men jeg får lyst til å legge til litt. Det du har lest, er sikkert noe om "name binding". I Python er alt referanser.

 

a = [1,2,3]
>>> a = [1,2,3]
>>> b = a
>>> b.append(4)
>>> a
[1, 2, 3, 4]

 

over er b ikke en kopi, men bare en ekstra binding av et navn til listeobjektet.

 

Ønsker du en reell kopi av en liste kan du bruke slicing-trikset, [:], eller som anbefalt:

 

b = list(a)

 

Du har også funksjonene copy() og deepcopy() i copy modulen.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...