asl*_*des 7 python reference list
我知道,这个问题已经被问这里的一个形式或另一个,但没有答案的解决,我看到的行为.我理解对象列表应该只包含对这些对象的引用.我观察到的似乎是这样:
class Foo(object):
def __init__(self,val):
self.value=val
a = Foo(2)
b = [a]
print b[0].value
a = Foo(3)
print b[0].value
Run Code Online (Sandbox Code Playgroud)
我希望首先看到2打印,然后3,因为我希望b[0]指向a,现在是一个新的对象.相反,我看到2和2.我在这里错过了什么?
在 Python 中,赋值运算符将右侧表达式的结果绑定到左侧表达式的名称。
所以,当你说
a = Foo(2)
b = [a]
Run Code Online (Sandbox Code Playgroud)
您已经创建了一个Foo对象并使用a. 然后创建一个b引用Foo对象 ( a)的列表。这就是为什么b[0].value打印2.
但,
a = Foo(3)
Run Code Online (Sandbox Code Playgroud)
创建一个新Foo对象并使用名称引用该对象a。所以,现在a指的是新Foo对象而不是旧对象。但是列表仍然只引用旧对象。这就是为什么它仍然打印 2。