のPythonに静的変数を理解しようとし、次は私を混乱させる: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とFAが分離されていることを期待しますしかし、faは最初にFoo.aに初期化されます。この説明は、最初にFoo.aでオブジェクトを修正しようとするか、f.aを再割り当てしようとした場合に機能しますが、最後の数行で混乱します。私はFoo.a = 3がFoo.aの再割り当てだけを期待するだろうが、もはやリストオブジェクトを参照していないので、f.aも再割り当てされたようだ。最初にf.aに割り当てた場合、Foo.aの再割り当てはf.aを変更しないので、f.aはf.aが明示的に割り当てられるまでFoo.aの構文的な砂糖です。これは正しいです?