闭坑指南 · Python#经典错误 #函数
可变默认参数与浅拷贝
函数默认参数只创建一次,可变对象会被后续调用共享。
可变默认参数与浅拷贝
经典坑
def f(x, items=[]):
items.append(x)
return items
默认参数在函数定义时只求值一次。[] 是同一个列表对象,每次调用都在改它。
浅拷贝
list.copy()、items[:] 只复制一层。嵌套列表里层仍共享引用。
怎么改
- 默认值用
None,函数体内if bucket is None: bucket = [] - 需要深拷贝时用
copy.deepcopy
运行上方代码:错误版本三次调用会累积 [1,2,3],修复版每次独立。