Viac na
Ako klonovať alebo kopírovať zoznam?
Aké sú možnosti klonovania alebo kopírovania zoznamu v jazyku Python?
Pri použití new_list = my_list
sa pri akejkoľvek zmene new_list
vždy zmení my_list
.
Prečo je to tak?
2262
3
V prípade
new_list = my_list
vlastne nemáte dva zoznamy. Priradenie len kopíruje odkaz na zoznam, nie skutočný zoznam, takženew_list
ajmy_list
sa po priradení vzťahujú na ten istý zoznam.Ak chcete zoznam skutočne skopírovať, máte rôzne možnosti:
Môžete použiť zabudovanú metódu
list.copy()
(dostupná od Pythonu 3.3):Môžete ho nakrájať na plátky:
Alex Martelli's názor (aspoň [v roku 2007][2]) na to je, že je to divná syntax a nemá zmysel ju používať nikdy. ;) (Podľa jeho názoru je ďalšia čitateľnejšia).
Môžete použiť vstavanú funkciu
list()
:Môžete použiť všeobecnú funkciu
copy.copy()
:Je to o niečo pomalšie ako
list()
, pretože sa najprv musí zistiť dátový typold_list
.Ak zoznam obsahuje objekty a chcete ich tiež skopírovať, použite generické
copy.deepcopy()
:Zrejme najpomalšia a pamäťovo najnáročnejšia metóda, ale niekedy sa jej nedá vyhnúť.
Príklad:
Výsledok:
Použiť
thing[:]
Pythonovský idióm na to je
newList = oldList[:]