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
[]。任何修改将一直持续到最后一个引用
[]消失为止。在下一个函数调用上,将
[]创建一个新的。
再次使用IOW,
[]在每次执行时都获取相同的对象并不正确,但是(在默认参数的情况下)只执行一次然后保存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)