如果您想要浅拷贝(不复制元素),请使用:
lst2=lst1[:]
如果要进行深层复制,请使用复制模块:
import copy lst2=copy.deepcopy(lst1)
我经常使用:
lst2 = lst1 * 1
如果lst1包含其他容器(如其他列表),则应使用复制库中的deepcopy,如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]是完全相同的对象.现在用deepcopy试试吧
>>> 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)
我喜欢做:
lst2 = list(lst1)
优于lst1 [:]的优点是相同的成语适用于dicts:
dct2 = dict(dct1)