python list的append 函数

x = [1, 2, 3]
y = []
y.append(x) 
x.append(9)
y.append(x)
print(y)

期望结果是 [[1, 2, 3], [1, 2, 3, 9]]

实际的输出结果是 [[1, 2, 3, 9], [1, 2, 3, 9]]

出现这种的原因是:

当list类型的对象进行append操作时,实际上追加的是该对象的引用。 

扩展的时候,并没有进行拷贝,仅仅是作为了引用,称作浅拷贝。

如果id(x),和 id(y[0]) 会发现它们的地址其实是一样的。

如果想要得到预期的结果,需要进行深拷贝:

import copy
x = [1, 2, 3]
y = []
y.append(copy.deepcopy(x))
x.append(9)
y.append(copy.deepcopy(x))
print(y)
此时结果就是, [[1, 2, 3], [1, 2, 3, 9]]


猜你喜欢

转载自blog.csdn.net/shidamowang/article/details/80246097