笔者在近期写代码时遇到一个有趣的问题,就是关于List赋值的事情。
比如A = [1,2,3,4],
假如把A赋值给B,即B=A,
如果接下来我们对B进行B+=B操作,然后输出A,会发生什么事情呢?
我们可以看到如下的结果,也就是对B的操作也影响到A了。
A = [1, 2, 3, 4]
B = A
B += B
print(A)
# [1, 2, 3, 4, 1, 2, 3, 4]
这是因为,在Pyhon中,List是当成一个类看待的,而A是类型为List的一个对象,python里面的对象赋值,是让B,A指向同一个内存空间,对A,B的操作都会影响到这个对象。
而为了避免这种情况,我们可以使用python里面的copy机制。copy有浅copy和deepcopy,deepcopy是创建一个完全一样的,但全新的副本。
import copy
A = [1, 2, 3, 4]
B = copy.deepcopy(A)
B += B
print(A)
[1, 2, 3, 4]