HolgerL Skrevet 18. oktober 2006 Del 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 Lenke til kommentar
FraXinuS Skrevet 18. oktober 2006 Del 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. Lenke til kommentar
HolgerL Skrevet 18. oktober 2006 Forfatter Del Skrevet 18. oktober 2006 Ah, ok, takker. Lenke til kommentar
zeitgeist Skrevet 19. oktober 2006 Del 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. Lenke til kommentar
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å