python语言中,函数的默认参数必须指向不可变对象。
举个简单的例子:
def test(L=[]):
L.append('a')
return L
print(test())
print(test())
print(test())
得到的结果是:
['a']
['a', 'a']
['a', 'a', 'a']
原因就在于函数的默认参数在函数定义时就已经被计算出来了,也就是L指向的内存位置已经确定,在调用test()函数改变了L的内容后,再次调用test(),默认参数L的内容就已经发生了变化。
如果想把默认参数设置为空列表,可以这么做:
def test(L=None):
if L is None:
L = []
L.append('a')
return L