【发布时间】:2014-01-19 20:36:00
【问题描述】:
我在看这个人的帖子: https://stackoverflow.com/a/2573965/1959054
他说的是通过询问人们以下代码的输出来测试人们的 Python 熟练程度:
x = 42
y = x
x = x+1
print x
print y
x = [1,2,3]
y = x
x[0]=4
print x
print y
我成功地预测了这两个输出,刚刚在一本书中阅读了关于可变列表和不可变字符串的类似场景。然后他举了这个例子:
x = ["foo",[1,2,3],10.4]
y = list(x)
y[0] = 'foooooo'
y[1][0] = 4
print x
print y
这让我很困惑。你看,我预测x 会打印为["foo",[1,2,3],10.4],y 会打印为["foooooo",[4,2,3],10.4]。
x 实际上打印为["foo",[4,2,3],10.4],这意味着即使外部列表引用不同的list 对象,x[1] 和y[1] 的内部列表仍然引用同一个对象。
我以前没有遇到过。
我的主要问题是,如果你想让y 等同于x,但不引用相同的列表,并且还要确保任何嵌套列表也没有引用相同的列表,你怎么做那? y = list(x) 似乎只处理外部列表。
我的第二个问题是从概念上获得任何帮助来理解为什么会这样。
【问题讨论】:
标签: python python-2.7