考虑以下函数:
def foo(L = []):
L.append(1)
print L
每次我调用 foo 时,它都会打印一个包含比上次更多元素的新列表,例如:
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
现在考虑以下函数:
def goo(a = 0):
a += 1
print a
多次调用时,我们得到如下图:
>>> goo()
1
>>> goo()
1
>>> goo()
1
即它不会在每次调用时打印更大的值。
这种看似不一致的行为背后的原因是什么?
此外,如何证明第一个示例中的反直觉行为是合理的,为什么函数在调用之间保持状态?