上級 › 可変デフォルト引数が呼び出しをまたいで共有される › パターン5
可変デフォルト引数が呼び出しをまたいで共有される
リストや辞書をデフォルト引数にすると、その1つのオブジェクトが全ての呼び出しで共有されます。
1 def enroll(student, roster=______): ^ 2 if roster is None: 3 roster = [] 4 roster.append(student) 5 return roster 6 7 print(enroll("Ken")) 8 print(enroll("Yui"))
出力: ['Ken']
['Ken', 'Yui']期待: ['Ken'] / ['Yui'] (エラーにはなりません)
空欄を埋めて実行を通す
名簿への登録関数でも同じ罠です。呼び出しごとに新しい名簿を渡しているつもりが、1つの名簿を使い回してしまいます。
次の問題