正在复制 python

Copying in python

有人可以解释为什么会这样吗?

>>> A = [1,[2,3],4] 
>>> B = A[:]
>>> B[0] = 'x'
>>> B
['x',[2,3],4]
>>>A
[1,[2,3],4]
>>> B[1][0] = 'y'
>>> B
['x',['y',3],4]
>>> A
[1,['y',3],4]

最后当我们问 return A 时,我们应该得到 [1,[2,3],4] 作为答案,对吧?因为我们为 B.

创建了单独的副本

列表在 python 中默认为引用。当您分配 B = A[:] 时,您试图创建 A 的副本。它按照您对正常值的预期工作。但是 A 的第二个元素又是另一个列表(即 [2,3]),而后者又是另一个引用。

也就是说这样想 B = A[:] 就像在说

B = []
B[0]=A[0] # here A[0] = 1
B[1]=A[1] # here A[1] is a reference to [2,3]
......

所以实际上 B 和 A 的第二个元素都是对同一个列表的引用。