重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
次の関数について考えてみます。
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
つまり、呼び出しごとに大きな値を出力するわけではありません。
そのような一見一貫性のない行動の背後にある理由は何ですか?
また、最初の例の直感に反する動作を正当化するにはどうすればよいですか?関数が呼び出し間で状態を保持するのはなぜですか?