a_list
初始化后的默认值(或其他任何默认值)将在函数内部存储,因此可以通过任何方式进行修改:
>>> def f(x=[]): return x
...
>>> f.func_defaults
([],)
>>> f.func_defaults[0] is f()
True
分别 对于Python 3:
>>> def f(x=[]): return x
...
>>> f.__defaults__
([],)
>>> f.__defaults__[0] is f()
True
因此,in中的值func_defaults
与内部函数众所周知(在我的示例中返回,以便从外部访问它)。
IOW,调用时发生的f()
是隐式x = f.func_defaults[0]
。如果该对象随后被修改,则将保留该修改。
相反,函数 的赋值始终为new []
。任何修改将一直持续到最后一个引用[]
消失为止。在下一个函数调用上,将[]
创建一个新的。