12

Pythonでは、オブジェクトが不変か可変かを確認する方法はありますか?

が不変の場合はisimmutable(a)を返し、そうでない場合は を返します。TrueaFalse

4

2 に答える 2

7

不変性の一般的なテストはありません。どのメソッドも基になるデータを変更できない場合にのみ、オブジェクトは不変です。

この質問を見てください

答えは言う:

1) ハッシュ可能であると同時に変更可能なユーザー定義クラスがない限り、キーは変更可能であってはなりません。あなたに課せられているのはそれだけです。ただし、ハッシュ可能で変更可能なオブジェクトを dict キーとして使用することは、悪い考えかもしれません。

2) 2 つの辞書間で値を共有しないことによって。キーは不変でなければならないため、キーを共有しても問題ありません。コピーモジュールの意味で、辞書をコピーすることは間違いなく安全です。ここで dict コンストラクターを呼び出すこともできます: b = dict(a)。不変の値を使用することもできます。

3) 組み込みの不変型はすべてハッシュ可能です。組み込みの可変型はすべてハッシュ可能ではありません。オブジェクトがハッシュ可能であるためには、それが変更されたとしても、その存続期間全体にわたって同じハッシュを持つ必要があります。

4)私が知っているわけではありません。2.xについて説明しています。

不変でなければ、型は可変です。型が組み込みの不変型である場合、その型は不変です: str、int、long、bool、float、tuple、およびおそらく私が忘れている他のいくつか。ユーザー定義型は常に変更可能です。

不変でなければ、オブジェクトは可変です。不変型のサブオブジェクトのみで再帰的に構成されている場合、そのオブジェクトは不変です。したがって、リストのタプルは可変です。タプルの要素を置き換えることはできませんが、リスト インターフェイスを介してそれらを変更し、全体的なデータを変更することはできます

それはあなたの質問に答えるはずです

于 2013-07-26T07:19:33.007 に答える
3

不変性またはハッシュ可能性をチェックしますか? 何かがハッシュ可能かどうかを確認したい場合は、次のようにハッシュします。

try:
    hash(thing)
except TypeError:
    print "It's unhashable."
else:
    print "It's hashable."

ハッシュ可能性は通常、必要なものです。何かが変更可能かどうかを確認したい場合、一般的なテストはありません。

于 2013-07-26T07:24:07.870 に答える