上級 › 可変デフォルト引数が呼び出しをまたいで共有される › パターン3
可変デフォルト引数が呼び出しをまたいで共有される
リストや辞書をデフォルト引数にすると、その1つのオブジェクトが全ての呼び出しで共有されます。
1 def visit(page, history=______): ^ 2 if history is None: 3 history = [] 4 history.append(page) 5 return history 6 7 print(visit("home")) 8 print(visit("about"))
出力: ['home']
['home', 'about']期待: ['home'] / ['about'] (エラーにはなりません)
空欄を埋めて実行を通す
履歴を記録するような関数でも同じ罠にかかります。呼び出し履歴だけのつもりが、他の呼び出しの記録まで混ざります。
次の問題