【发布时间】:2020-08-28 13:42:40
【问题描述】:
我很难理解为什么实例 C 保留实例 B 的数据,即使我使用默认的空列表初始化了实例变量 var。为什么忽略默认参数“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如何从前面追加到列表中?
【问题讨论】:
-
Python 列表是可变对象。因此,在定义函数时会创建一个新列表,并且每次后续调用都使用相同的列表。这就是为什么你应该避免使用可变对象作为默认参数的原因。请阅读更多 here Second answer here 还告诉您可变对象和不可变对象之间的更多区别。
-
有意义。我将使用 None 作为默认值,并使用 if 语句来初始化变量
标签: python-3.x default-value instance-variables class-variables