python - 类可变性

时间:2012-12-11 23:57:00

标签: python class mutability

我从考试中得到了以下代码,我不明白为什么第一次进行f2 = f1,进行f1.set()更改f2但之后设置{f1 = Foo("Nine", "Ten") 1}}根本不会更改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']

1 个答案:

答案 0 :(得分:5)

f2 = f1

在此声明之后,f1f2都是对Foo相同实例的引用。因此,一方的改变会影响另一方。

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

在此之后,f1被分配给 Foo个实例,因此f1f2不再以任何方式连接 - 所以一个人的改变不会影响另一个。