我从一次考试中得到了下面的代码,但我不明白为什么当你第一次做 f2 = f1
时,做 f1.set()
改变 f2
但在那之后当你设置 f1 = 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']
最佳答案
f2 = f1
在这条语句之后,f1
和 f2
都是对 Foo
的相同实例的引用。因此,一个的改变会影响另一个。
f1 = Foo("Nine", "Ten")
在此之后,f1
被分配给一个新 Foo
实例,所以 f1
和 f2
不再以任何方式连接 - 因此其中一个的更改将不会影响另一个。
关于python - 类可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830550/