私は以下のPythonの動作に困惑しています。なぜ2番目と3番目のインスタンスの属性(b
、c
)、i
がクラス属性i
ですが、a
の動作が異なるのはなぜですか?なぜインスタンス変数を変更すると静的変数も変わるのですか?
In [47]: class Foo:
...: i=0
...:
In [48]: a = Foo()
In [49]: a.i = 1
In [50]: a.i
Out[50]: 1
In [51]: Foo.i
Out[51]: 0
In [52]: b = Foo()
In [53]: b.i
Out[53]: 0
In [54]: Foo.i is b.i
Out[54]: True
In [55]: Foo.i is a.i
Out[55]: False
In [56]: c = Foo()
In [57]: Foo.i is c.i
Out[57]: True
「int is int」の結果を解釈することに注意してください... Pythonは小さな整数をキャッシュします。おそらく、そのようなデモンストレーションにはダミーのクラスを使用する方がよいでしょうが、この場合、デモンストレーションには影響しないとは思いません。 –