Чтобы получить уникальное сравнение:
Чтобы быть уникальным, вы можете сериализовать данные, а затем сравнить сериализованное значение, чтобы убедиться, что оно точно соответствует.
Пример:
import pickle
class C:
i = 1
j = 2
c1 = C()
c2 = C()
c3 = C()
c1.i = 99
unique_hash1 = pickle.dumps(c1)
unique_hash2 = pickle.dumps(c2)
unique_hash3 = pickle.dumps(c3)
unique_hash1 == unique_hash2 #False
unique_hash2 == unique_hash3 #True
Если вам не нужны уникальные значения для каждого объекта, но в основном уникальные:
Обратите внимание, что одно и то же значение всегда будет приводить к одному и тому же хешу, но 2 разных значения могут приводить к одному и тому же хешу.
Вы не можете использовать что-то вроде встроенной функции hash () (если вы не переопределите __hash__
)
hash(c1) == hash(c2) #False
hash(c2) == hash(c3) #False <--- Wrong
или что-то вроде сериализации данных с использованием pickle, а затем используйте zlib.crc32.
import zlib
crc1 = zlib.crc32(pickle.dumps(c1))
crc2 = zlib.crc32(pickle.dumps(c2))
crc3 = zlib.crc32(pickle.dumps(c3))
crc1 == crc2 #False
crc2 == crc3 #True