2 つの任意の python オブジェクトの等価性を判断するためのベスト プラクティスはありますか? ある種のオブジェクトのコンテナーを作成し、新しいオブジェクトがコンテナーに格納されている古いオブジェクトと等しいかどうかを判断する必要があるとします。
問題は、「is」を使用できないことです。これは、変数がまったく同じオブジェクトにバインドされているかどうかのみをチェックするためです (ただし、オブジェクトのディープ コピーが存在する可能性があり、これは私の意味では元のオブジェクトと同じです)。これらのオブジェクトの一部は、numpy 配列のように要素ごとに等しいものを返すため、「==」も使用できません。
あらゆる種類のオブジェクトの等価性を判断するためのベスト プラクティスはありますか? たとえば、
repr(objectA)==repr(objectB)
十分ですか?
または、使用するのが一般的ですか:
numpy.all(objectA==objectB)
objectA == objectB が "[]" に評価される場合、おそらく失敗します
乾杯、ロバート
編集:
3 番目のコメントについては、「「同等のオブジェクト」の定義は何ですか?」について詳しく説明します。
強い意味で、私は平等の定義を持っていません。むしろ、オブジェクトが等しいかどうかをオブジェクトに判断させます。問題は、私が理解している限り、それぞれeqまたは == について十分に合意された標準がないことです。ステートメントは、配列またはあらゆる種類のものを返すことができます。
私が念頭に置いているのは、 eqと "is"の間にある演算子を SEQ (強い等価性) と呼ぶようにすることです。SEQ は、常に単一のブール値に評価され (たとえば、すべての要素が等しいことを意味する numpy 配列の場合)、オブジェクトが自分自身を等しいと見なすかどうかを決定するという意味でeqよりも優れています。しかし、SEQ は、メモリ内で区別されるオブジェクトも同等である可能性があるという意味で、「is」より劣ります。