Mere
Hvordan kloner eller kopierer jeg en liste?
Hvilke muligheder er der for at klone eller kopiere en liste i Python?
Når jeg bruger new_list = my_list
, ændrer enhver ændring af new_list
my_list
hver gang.
Hvorfor er dette tilfældet?
2262
3
Med
new_list = my_list
har du faktisk ikke to lister. Tildelingen kopierer blot referencen til listen, ikke den faktiske liste, så bådenew_list
ogmy_list
refererer til den samme liste efter tildelingen.For at kopiere listen har du forskellige muligheder:
Du kan bruge den indbyggede
list.copy()
metode (tilgængelig siden Python 3.3):Du kan skære den i skiver:
Alex Martelli's mening (i hvert fald [tilbage i 2007][2]) om dette er, at det er en underlig syntaks, og det giver ingen mening at bruge den nogensinde. ;) (Efter hans mening er den næste mere læsevenlig).
Du kan bruge den indbyggede funktion
list()
3:Du kan bruge den generiske
copy.copy()
:Dette er lidt langsommere end
list()
, fordi den først skal finde ud af datatypen forold_list
.Hvis listen indeholder objekter, og du også vil kopiere dem, skal du bruge generisk
copy.deepcopy()
:Naturligvis den langsomste og mest hukommelseskrævende metode, men nogle gange uundgåelig.
Eksempel:
Resultat:
Brug
thing[:]
Python's idiom til at gøre dette er
newList = oldList[:]