Что произойдёт, если переопределить `__eq__`, но не переопределить `__hash__` в пользовательском классе? Почему это важно при использовании объектов в `set` и `dict`?
__eq__ и __hash__
Ответ 1 / 1
В Python 3, если вы переопределяете `__eq__`, но не определяете `__hash__`, интерпретатор по умолчанию делает объект не-хешируемым (`__hash__ = None`). Это предотвращает нарушение контракта для хеш-структур: если два объекта равны по `==`, их хеши должны быть равны и не меняться во времени.
Для использования в `set`/`dict` нужно правильно реализовать и `__eq__`, и `__hash__` на основе неизменяемых полей.