上級 › 可変デフォルト引数が呼び出しをまたいで共有される › パターン1
可変デフォルト引数が呼び出しをまたいで共有される
リストや辞書をデフォルト引数にすると、その1つのオブジェクトが全ての呼び出しで共有されます。
1 def add_item(item, items=______): ^ 2 if items is None: 3 items = [] 4 items.append(item) 5 return items 6 7 print(add_item("a")) 8 print(add_item("b"))
出力: ['a']
['a', 'b']期待: ['a'] / ['b'] (エラーにはなりません)
空欄を埋めて実行を通す
デフォルト引数の[]は関数定義時に一度だけ作られ、呼び出しをまたいで共有されます。Noneを既定値にして、関数内で空リストを作り直すのが定石です。
次の問題