【发布时间】:2012-11-09 03:55:54
【问题描述】:
可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
我有这个代码
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 永久绑定到 some 列表。我尝试复制列表,
def __init__(self, var1=copy([])):
但得到了相同的结果,因此命名参数的表达式似乎在调用 init 之前被评估,它只是给 var1 一个空列表的副本,然后在实例之间共享。
那么如何使用 [] 作为命名参数的默认值?
【问题讨论】:
-
它们看起来确实是重复的。抱歉,我在发布之前确实看过,但我没有看到其他问题。话虽如此,其他问题的答案都没有显示如何正确使用可变默认参数。
标签: python constructor named-parameters