什么是复制列表的最佳方法?
什么是复制列表的最佳方法?
这个问题已经有答案了:
复制一个列表的最佳方式是什么?我知道以下几种方式,哪个更好?或者还有其他的方式吗?
lst = ['one', 2, 3] lst1 = list(lst) lst2 = lst[:] import copy lst3 = copy.copy(lst)
admin 更改状态以发布 2023年5月22日
我经常使用:
lst2 = lst1 * 1
如果lst1 包含其他容器(如其他列表),则应使用来自“复制”库的深层复制,如Mark所示。
更新:解释深层复制
>>> 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]])
不是很可读,我来用for打印一下:
>>> 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]]