什么是复制列表的最佳方式?
这个问题在这里已经有了答案:
如果你想要一个浅拷贝(元素不被复制),使用:
lst2=lst1[:]
如果您想进行深层复制,请使用复制模块:
import copy
lst2=copy.deepcopy(lst1)
我经常使用:
lst2 = lst1 * 1
如果lst1包含其他容器(如其他列表),则应使用Mark所示的copy lib中的deepcopy。
更新:解释deepcopy
>>> a = range(5)
>>> b = a*1
>>> a,b
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
>>> a[2] = 55
>>> a,b
([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])
正如你可能会看到只有一个改变...我现在尝试列表的列表
>>>
>>> a = [range(i,i+3) for i in range(3)]
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> b = a*1
>>> a,b
([[0, 1, 2], [1, 2, 3], [2, 3, 4]], [[0, 1, 2], [1, 2, 3], [2, 3, 4]])
不太可读,让我用a打印:
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> a[1].append('appended')
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
你看到了吗? 它也附加到b [1],所以b [1]和a [1]是完全相同的对象。 现在用深度拷贝来试试它
>>> from copy import deepcopy
>>> b = deepcopy(a)
>>> a[0].append('again...')
>>> for i in (a,b): print i
[[0, 1, 2, 'again...'], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
你也可以这样做:
a = [1, 2, 3]
b = list(a)
链接地址: http://www.djcxy.com/p/79359.html
上一篇: What is the best way to copy a list?
下一篇: Difference between the System.Array.CopyTo() and System.Array.Clone()