You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:40