Více na
Jak klonovat nebo kopírovat seznam?
Jaké jsou možnosti klonování nebo kopírování seznamu v jazyce Python?
Při použití new_list = my_list
se při jakékoli změně new_list
vždy změní my_list
.
Proč tomu tak je?
2262
3
Při použití
new_list = my_list
ve skutečnosti nemáte dva seznamy. Přiřazení pouze kopíruje odkaz na seznam, nikoliv skutečný seznam, takže jaknew_list
, takmy_list
odkazují po přiřazení na stejný seznam.Chcete-li seznam skutečně zkopírovat, máte různé možnosti:
Můžete použít vestavěnou metodu
list.copy()
(k dispozici od verze Python 3.3):Můžete jej nakrájet na plátky:
Alex Martelli's názor (alespoň [v roce 2007][2]) na to je, že je to divná syntaxe a nemá smysl ji nikdy používat. ;) (Podle jeho názoru je další čitelnější).
Můžete použít vestavěnou funkci
list()
:Můžete použít obecnou funkci
copy.copy()
:Tento postup je o něco pomalejší než
list()
, protože musí nejprve zjistit datový typold_list
.Pokud seznam obsahuje objekty a chcete je také zkopírovat, použijte obecný
copy.deepcopy()
:Zřejmě nejpomalejší a paměťově nejnáročnější metoda, ale někdy se jí nelze vyhnout.
Příklad:
Výsledek:
Použít
věc[:]
Pythonovský idiom pro tento postup je
newList = oldList[:]
.