Python函数默认参数为列表时为何会累积值?
Python默认参数累积值的原因解析
先看你给出的代码:
def foo( a = [] ): a += [1] print(a) foo() # prints [1] foo() # prints [1,1] foo() # prints [1,1,1]
核心原因
这是Python默认参数的特性导致的:函数的默认参数是在函数定义阶段就完成初始化的,而不是每次调用函数时重新创建。
这里的a = []并不是每次调用foo()时都会生成一个新的空列表,而是在你写这个函数定义的时候,就已经创建了一个固定的列表对象。之后每次调用foo()且不传入a参数时,都会复用这个已经存在的列表对象,执行a += [1]就是不断给这个列表追加元素,所以输出会持续累积。
解决方法
如果想要每次调用都得到独立的空列表,应该把默认参数设为None,然后在函数内部初始化新列表:
def foo(a=None): if a is None: a = [] a += [1] print(a)
这样每次调用foo()时,都会生成一个全新的空列表,输出就始终是[1]。
内容的提问来源于stack exchange,提问作者iam_agf
相关产品推荐
相关产品推荐

