Python函数默认列表驻留内存导致输出异常的原因咨询
Python默认参数为空列表时重复追加元素的原因解释
先看复现该问题的示例代码:
def function_a(lst=[]): lst.extend(['X', 'Y', 'Z']) print(lst) function_a() # 输出: ['X', 'Y', 'Z'] function_a() # 输出: ['X', 'Y', 'Z', 'X', 'Y', 'Z']
核心原因
- Python的默认参数是在函数定义的那一刻就完成创建和初始化的,而不是每次调用函数时重新生成。
- 列表属于可变对象,当你在函数内部对这个默认列表执行修改操作(比如
extend、append),本质是在修改同一个内存地址里的列表对象。 - 每次调用函数如果没有传入自定义的列表参数,就会复用这个已经被修改过的默认列表,自然会出现元素重复追加的情况。
正确的写法
如果希望每次调用时都使用新的空列表,应该把默认参数设为None,在函数内部初始化:
def function_a(lst=None): if lst is None: lst = [] lst.extend(['X', 'Y', 'Z']) print(lst) function_a() # 输出: ['X', 'Y', 'Z'] function_a() # 输出: ['X', 'Y', 'Z']
内容的提问来源于stack exchange,提问作者Patrick Cree
相关产品推荐
相关产品推荐

