正在复制 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 的第二个元素都是对同一个列表的引用。
有人可以解释为什么会这样吗?
>>> 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 的第二个元素都是对同一个列表的引用。