TL;DR インスタンス変数のつもりでクラス直下に変数を定義すると事故る場合がある 同一プロセス内でクラスがインスタンス化されるのが2回目以降、かつ変数がミュータブルな型である場合に事故る インスタンス変数は__init__内で初期化すると良い これにまつわる根本の動作はまだ理解できていない 事の顛末 Pythonでマルチスレッドで動くコードを書いていた際、別々のスレッド同士でlistの中身が混ざり合うことがありました。 Pythonを書いていながら私は静的型付け言語が好みなもので、JavaやSwiftでそうするように変数の名前と型を先に書いておいたのです。 再現 ここでは、メソッドの引数に指定された整数たちを奇数と偶数のリストに振り分けて格納する、という例を用います。 from typing import List class OddAndEven: odds: List[int] =
![Pythonではインスタンス変数をクラス定義直下に書いてはいけない(戒め) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/474309568863f95a08b3fd07885ec8e5f4159d0d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZ0eHQ9UHl0aG9uJUUzJTgxJUE3JUUzJTgxJUFGJUUzJTgyJUE0JUUzJTgzJUIzJUUzJTgyJUI5JUUzJTgyJUJGJUUzJTgzJUIzJUUzJTgyJUI5JUU1JUE0JTg5JUU2JTk1JUIwJUUzJTgyJTkyJUUzJTgyJUFGJUUzJTgzJUE5JUUzJTgyJUI5JUU1JUFFJTlBJUU3JUJFJUE5JUU3JTlCJUI0JUU0JUI4JThCJUUzJTgxJUFCJUU2JTlCJUI4JUUzJTgxJTg0JUUzJTgxJUE2JUUzJTgxJUFGJUUzJTgxJTg0JUUzJTgxJTkxJUUzJTgxJUFBJUUzJTgxJTg0JTI4JUU2JTg4JTkyJUUzJTgyJTgxJTI5JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iYmM3ZThiNzc4NTRjNmNiNTcyZGExOThiM2U3NmMzZg%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwa3hwaG90b2dyYXBoZXImdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWU4M2M3ZGJjNjA0ZTBiYTgwOTQ2ZTlkMWQ0YzFkYjUw%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D9541c32e37d487a7ae934a135f0552d4)