可能重复:
“Least Astonishment” in Python: The Mutable Default Argument如何使用[]作为python中命名函数参数的默认值?
我有这样的代码
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([])):
,但得到了同样的结果,因此对于命名参数表达出现之前进行评估,以初始化被调用,它只是给了空列表这是当时的VAR1副本在实例中共享。
那么如何使用[]作为命名参数的默认值?
他们似乎重复。对不起,我在发布之前看过,但没看到其他问题。话虽如此,其他问题的答案都没有显示如何正确使用可变默认参数。 – savagent