存在一个奇怪的现象:
def foo(a=[]):
a.append(5)
return a
>>> foo()
[5]
>>> foo()
[5, 5]
>>> foo()
[5, 5, 5]
>>> foo()
[5, 5, 5, 5]
>>> foo()
曾经被称为动态设计缺陷,然而这个问题应当有更深层次的解释。
Python 中的函数是最高等级的对象,而不仅仅是一小段代码。一个函数是一个被它自己定义而执行的对象,默认参数是一种“成员数据”,所以它们的状态和其他对象一样,会随着每一次调用而改变。
更详细的内容参考:Python中的默认参数