То, что я сделал, очевидно, не то, что хотелось бы сделать, скорее, я просто тестировал реализацию __hash__
для данного класса.
Я хотел посмотреть, добавляет ли phony "hashable" класс в словарь, а затем изменение его хэш-значения приведет к тому, что он не сможет получить к нему доступ.
Мой класс выглядит следующим образом:
class PhonyHash:
def __hash__(self):
val = list("A string")
return id(val) # always different
Выполнение следующего в моей консоли IPython
:
>>> p = PhonyHash()
>>> d = { p: "a value"}
>>> hash(p) # changes hash
а затем попытка доступа к элементу с помощью d[p]
работает:
>>> d[p]
"a value"
Я понимаю, это не то, что нужно сделать, мне просто интересно, почему это работает. Не использует dict
объект hash()
для хранения/извлечения объекта? Почему это работает?
изменить:, как указано в комментариях @VPfB sets
, по каким-то причинам:
>>> p = PhonyHash()
>>> s = {p}
>>> p in s
False