创建新对象即使使用默认值也可以保留数据

即使我使用默认的空列表初始化了实例变量var,我仍在努力理解为什么实例C保留实例B的数据。为什么默认参数“ var = []”会被忽略?。

class A():
    def __init__(self,var=[]):
        self.var = var

B = A()
B.var.append(3)
C = A()
print(C.var)

打印重新调整

[3]

甚至是陌生人是这个

class A():
    def __init__(self,var=[2]):
        self.var = var

B = A()
B.var.append(3)
C = A()
print(C.var)

打印

[2,3]

如何将语句self.var = var从前面追加到列表中?

wyf8088_0 回答:创建新对象即使使用默认值也可以保留数据

根据given here

Python变量是一个符号名称,它是对对象的引用或指针。将对象分配给变量后,即可使用该名称引用该对象。但是数据本身仍然包含在对象中。

B = A()
B.var.append(3)

在这里,A的引用传递给B。因此它们指向相同的数据,但只是被不同的名称调用。因此,无论您对B执行什么操作,您也都对A执行。

因此,稍后将A分配给C时,C引用相同的数据。

如果您不希望发生这种情况,请使用Deepcopy:

class A():
    def __init__(self,var=[]):
        self.var = var
import copy
B = copy.deepcopy(A())
B.var.append(3)
C = A()
print(C.var)
本文链接:https://www.f2er.com/2372256.html

大家都在问