3

私は試験から以下のコードを取得しましたが、最初に変更f2 = f1を行ったときになぜ設定がまったく変更されないのか理解できません。誰かが理由を知っているなら、私に説明してください。どうもありがとう!f1.set()f2f1 = Foo("Nine", "Ten")f2

コード:

class Foo():
    def __init__(self, x=1, y=2, z=3):
        self.nums = [x, y, z]

    def __str__(self):
        return str(self.nums)

    def set(self, x):
        self.nums = x

f1 = Foo()
f2 = Foo("One", "Two")

f2 = f1
f1.set(["Four", "Five", "Six"])
print f1
print f2

f1 = Foo("Nine", "Ten")
print f1
print f2

f1.set(["Eleven", "Twelve"])
print f1
print f2

結果:

['Four', 'Five', 'Six']
['Four', 'Five', 'Six']
['Nine', 'Ten', 3]
['Four', 'Five', 'Six']
['Eleven', 'Twelve']
['Four', 'Five', 'Six']
4

1 に答える 1

5
f2 = f1

このステートメントの後、f1との両方が の同じインスタンスf2への参照になります。したがって、一方を変更すると他方にも影響が及びます。Foo

f1 = Foo("Nine", "Ten")

この後、は新しいインスタンスf1に割り当てられるため、は接続されなくなります。したがって、一方を変更しても他方には影響しません Foof1f2

于 2012-12-12T00:00:20.303 に答える