Класс, который не определяет метод __hash__
, будет хэшировать свои экземпляры в соответствии с их id
. Что касается CPython, это означает, что каждый раз, когда экземпляр сохраняется и перезагружается, он меняет хеш, так как его позиция в памяти изменяется.
Вот подтверждение концепции.
class Foo:
pass
instance = Foo()
print('hash:', hex(hash(instance)))
print('id: ', hex(id(instance)))
выход
hash: 0x22f3f57608
id: 0x22f3f576080
Точное преобразование hash(o) == id(o) // 16
.