使用可变对象作为默认值是一个非常糟糕的主意,如下所示:
def __init__(self, lst=[], intg=0):
# ...
改成这样:
def __init__(self, lst=None, intg=0):
if lst is None:
lst = []
# ...
您的版本不起作用的原因是,在定义函数时仅创建一次空列表,而不是每次调用函数时创建空列表。
在某些 Python 实现中,您可以通过检查以下值来查看函数的默认值:func_defaults
:
print test.__init__.func_defaults
name_dict[name] = test()
# ...
Output:
([],)
Anne 1 [1]
([1],)
Leo 1 [1, 2]
([1, 2],)
Suzy 1 [1, 2, 3]