【发布时间】:2019-01-22 11:50:13
【问题描述】:
我在网上查找时遇到了这 3 段代码。问题是预测输出并解释原因。
示例 1:
x = 42
y = x
x = x + 1
print x
print y
输出示例 1:
43
42
示例 2:
x = [1, 2, 3]
y = x
x[0] = 4
print x
print y
输出示例 2:
[4, 2, 3]
[4, 2, 3]
示例 3:
x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y
输出示例 3:
['foo', [4, 2, 3], 10.4]
['fooooooo', [4, 2, 3], 10.4]
在大多数情况下,我理解这是一个关于浅拷贝和深拷贝的问题,但我似乎无法理解这个简单的事情。在 x[0] = 4 的示例 2 中,我知道 x 和 y 指向同一个对象,因此 x 和 y 在此语句中被重新定义,而不仅仅是 x。但是为什么在示例 3 中没有遵循相同的逻辑。在y[0] = 'fooooooo' 这应该会导致x 和y 被重新定义,就像y[1][0] = 4 的以下行导致x 和y 一起被重新定义。
【问题讨论】:
标签: python-2.x deep-copy shallow-copy