HolgerL Skrevet 18. oktober 2006 Skrevet 18. oktober 2006 (endret) 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 18. oktober 2006 av HolgerLudvigsen
FraXinuS Skrevet 18. oktober 2006 Skrevet 18. oktober 2006 Du kan se her: http://docs.python.org/lib/module-copy.html når du tar [:] tar du en shallow copy.
zeitgeist Skrevet 19. oktober 2006 Skrevet 19. oktober 2006 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.
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå