質問: pythonのインスタンスはミュータブルなのでしょうか?それともイミュータブルなのでしょうか? インスタンスの中身がリストみたいに変えられるので、ミュータブルのような気もするし、リストと違ってhashableなのでイミュータブルな気もしています。。。 何かイミュータブルかミュータブルなのか断言するための方法が存在するのでしょうか? ``` class B: def __init__(self) -> None: self.l=[1,2,3] def b(self): self.l.append(1) c=B() print(id(c))#4325646784 c.b() print(id(c))#4325646784 ```
回答: > > インスタンスの中身がリストみたいに変えられるので、ミュータブルのような気もするし、リストと違ってhashableなのでイミュータブルな気もしています。。。 > > > 使い方によります。 * `B`が**どのインスタンス**であるかが重要な場合(`l`はデバッグ情報など、外部からアクセスして使うようなものではない)には、`B`をイミュータブルとみなしても問題ありません。 * `l`の値を使うようなクラスであれば、それはミュータブルなので、`__hash__ = None`でunhashableに切り替えておく必要があります。