python中的对象引用列表

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,现在是一个新的对象.相反,我看到22.我在这里错过了什么?

the*_*eye 5

在 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。