Pythonでは、オブジェクトが不変か可変かを確認する方法はありますか?
が不変の場合はisimmutable(a)
を返し、そうでない場合は を返します。True
a
False
Pythonでは、オブジェクトが不変か可変かを確認する方法はありますか?
が不変の場合はisimmutable(a)
を返し、そうでない場合は を返します。True
a
False
不変性の一般的なテストはありません。どのメソッドも基になるデータを変更できない場合にのみ、オブジェクトは不変です。
答えは言う:
1) ハッシュ可能であると同時に変更可能なユーザー定義クラスがない限り、キーは変更可能であってはなりません。あなたに課せられているのはそれだけです。ただし、ハッシュ可能で変更可能なオブジェクトを dict キーとして使用することは、悪い考えかもしれません。
2) 2 つの辞書間で値を共有しないことによって。キーは不変でなければならないため、キーを共有しても問題ありません。コピーモジュールの意味で、辞書をコピーすることは間違いなく安全です。ここで dict コンストラクターを呼び出すこともできます: b = dict(a)。不変の値を使用することもできます。
3) 組み込みの不変型はすべてハッシュ可能です。組み込みの可変型はすべてハッシュ可能ではありません。オブジェクトがハッシュ可能であるためには、それが変更されたとしても、その存続期間全体にわたって同じハッシュを持つ必要があります。
4)私が知っているわけではありません。2.xについて説明しています。
不変でなければ、型は可変です。型が組み込みの不変型である場合、その型は不変です: str、int、long、bool、float、tuple、およびおそらく私が忘れている他のいくつか。ユーザー定義型は常に変更可能です。
不変でなければ、オブジェクトは可変です。不変型のサブオブジェクトのみで再帰的に構成されている場合、そのオブジェクトは不変です。したがって、リストのタプルは可変です。タプルの要素を置き換えることはできませんが、リスト インターフェイスを介してそれらを変更し、全体的なデータを変更することはできます
それはあなたの質問に答えるはずです
不変性またはハッシュ可能性をチェックしますか? 何かがハッシュ可能かどうかを確認したい場合は、次のようにハッシュします。
try:
hash(thing)
except TypeError:
print "It's unhashable."
else:
print "It's hashable."
ハッシュ可能性は通常、必要なものです。何かが変更可能かどうかを確認したい場合、一般的なテストはありません。