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]]