【发布时间】:2016-05-29 21:54:36
【问题描述】:
试图理解 Python 的静态变量,以下让我很困惑:
>>> class Foo():
... a = [1]
...
>>> f = Foo()
>>> Foo.a.append(2)
>>> Foo.a
[1, 2]
>>> f.a
[1, 2]
>>> f.a.append(3)
>>> f.a
[1, 2, 3]
>>> Foo.a
[1, 2, 3]
>>> # appears that Foo.a and f.a reference same list object
...
>>> Foo.a = 3
>>> f.a
3
>>> Foo.a
3
根据这个问题的最佳答案 (Static class variables in Python),我希望 Foo.a 和 f.a 是单独的名称,但 f.a 只是首先初始化为 Foo.a。如果您首先尝试通过 Foo.a 修改对象或重新分配 f.a,则此解释有效,但我对最后几行感到困惑。我希望 Foo.a = 3 只重新分配 Foo.a,但它似乎也重新分配了 f.a,因为它不再引用列表对象。如果首先分配给 f.a,则重新分配 Foo.a 不会改变 f.a,因此 f.a 似乎是 Foo.a 的语法糖,直到 f.a 被显式分配给。这是正确的吗?
【问题讨论】:
标签: python variables static instance