Grace's Dev Site
write关于我
闭坑指南 · Python#经典错误 #函数

可变默认参数与浅拷贝

函数默认参数只创建一次,可变对象会被后续调用共享。

可变默认参数与浅拷贝

经典坑

def f(x, items=[]):
    items.append(x)
    return items

默认参数在函数定义时只求值一次[] 是同一个列表对象,每次调用都在改它。

浅拷贝

list.copy()items[:] 只复制一层。嵌套列表里层仍共享引用。

怎么改

  • 默认值用 None,函数体内 if bucket is None: bucket = []
  • 需要深拷贝时用 copy.deepcopy

运行上方代码:错误版本三次调用会累积 [1,2,3],修复版每次独立。

在线运行 Python

Pyodide