python的五种复制方法的比较


>>> import copy

>>> a = [[10], 20]
>>> b = a[:]                #<---切片复制
>>> c = list(a)             #<---构造函数
>>> d = a * 1               #<---乘一赋值
>>> e = a.copy()           #<---copy方法
>>> f = copy.deepcopy()    #<---deepcopy函数

>>> a.append(21)
>>> a[0].append(11)

>>> for i in (a,b,c,d,e,f):
...     print(id(i),id(i[0]),i)
...
31174728 35438152 [[10, 11], 20, 21]
35446600 35438152 [[10, 11], 20]
35623816 35438152 [[10, 11], 20]
31175112 35438152 [[10, 11], 20]
35457736 35438152 [[10, 11], 20]
35457480 35457800 [[10], 20]

从以上可以看出,五种方式都可以得到一个新的列表,但是如果列表中含有列表,所有b, c, d, e四个新列表的子列表都是指引到同一个对象上。只有使用copy.deepcopy(a)方法得到的新列表f才是包括子列表在内的完全复制。

你可能感兴趣的:(python)