我有这个代码
class Test(object):
def __init__(self, var1=[]):
self._var1 = var1
t1 = Test()
t2 = Test()
t1._var1.append([1])
print t2._var1
结果我得到“[[1]]”。很明显 t1._var1 和 t2._var1 正在处理同一个列表。如果我把
t3 = Test()
print t3._var1
然后我也得到“[[1]]”。所以 var1=[] 似乎将 var1 永久绑定到某些列表。我尝试复制列表,
def __init__(self, var1=copy([])):
但得到了相同的结果,因此命名参数的表达式似乎在调用 init 之前被评估,它只是给 var1 一个空列表的副本,然后在实例之间共享。
那么如何使用 [] 作为命名参数的默认值呢?