なぜオブジェクト間でデフォルト値が共有されるのですか?
https://docs.python.org/ja/3/faq/programming.html#why-are-default-values-shared-between-objects
#Python_プログラミング_FAQ
デフォルト値が空の辞書の例
デフォルト値は、関数が定義されたときに一度だけ生成されます。
この例の辞書のように、そのオブジェクトが変更されたとき、その後の関数の呼び出しは変更後のオブジェクトを参照します。
(関連してそう:Function dissection lab -- learn how functions work by examining their innards)
定義の時に、数、文字列、タプル、None など、イミュータブルなオブジェクトを使うと変更される危険がありません。辞書、リスト、クラスインスタンスなどのミュータブルなオブジェクトは混乱のもとです。
この性質から、ミュータブルなオブジェクトをデフォルト値として使わないプログラミング手法がいいです。代わりに、None をデフォルト値に使い、そのパラメタが None である時にだけ、関数の内部で新しいリスト/辞書/その他をつくるようにしてください。
項目24 動的なデフォルト引数を指定するときにはNoneとdocstringを使うと同内容
この性質を利用する例:memoizing