私は、リファレンスがPythonでどのように動作するかを理解していることに間違いがあると考えている状況に遭遇しました。Pythonリファレンス
たちは二つのクラスがあるとします。
class A:
def __init__(self):
self.x = [1,2,3]
def modify(self):
self.x.append(4)
def reset(self):
self.x = []
class B:
def __init__(self, x):
self._x = x
def say(self):
print self._x
a = A()
b = B(a.x)
b.say()
a.modify()
b.say()
a.reset()
b.say()
私が期待される出力をした:
[1, 2, 3]
[1, 2, 3, 4]
[]
私が得た出力ました:
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
に思えるその私が呼ばれたときreset()
を設定し、self.x
を新しいリストに設定すると、参照番号B
独立して生き残り、参照の代わりにコピーになった。これは正しい理解ですか?
もう1つの方法は、@propertyデコレータを使用してxにアクセスすることです。 – VGE