python – 类可变性
作者:互联网
我从考试中得到了下面的代码,我不明白为什么你第一次做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,class,mutability 来源: https://codeday.me/bug/20190901/1783455.html