Web系や機械学習を勉強中。医療におけるIT活用に興味があります。次のように怒られました。pylint(W0102)とりあえず無視して適当に動かしたところ、案の定バグりました。コードの例を示します。my_listこれをベースに議論を進めます。インスタンスを生成します。デフォルト値である[]が入ります。したりいろいろ変更を加えたりしたとしましょう。self.my_list.append('A')という処理をしたとします。実は、['A']が入ります。対する変更が引き継がれているのです。あることに起因します。デフォルト値は同じ参照です。関する操作はデフォルト値である[]にも影響を及ぼします。同じ参照なので、前のインスタンスにおける変更が残存するのです。入っている値は同じですが、その参照は異なります。デフォルト引数の[]とself.my_listを別のものとして扱うわけです。引数に正しくリストを与えた場合、このメソッドで行ったリストへの変更は外に出ると無効になります。この[]は__init__が実行されるたびに生成されるので複数のインスタンスで同じ参照になることはありません。引数に正しくリストを与えた場合、このメソッドで行ったリストへの変更はメソッドの外でも反映されています。記事一覧へコメントフォームは設置していませんので、ご意見・ご感想などはTwitter(@cosnomi)などへお願いします。