Built-in функция hash() работает напрямую с built-in типами и переключается на вызов __hash__ для типов, определяемых пользователем. Если два объекта сравниваются между собой, их хэш-коды также должны быть одинаковыми, иначе алгоритм хэш-таблицы не работает. Например, поскольку 1 == 1.0 — это True, то hash(1) == hash(1.0) тоже должно быть True, даже несмотря на то, что внутренние представления int и float сильно отличаются(1).
Почему Python не использует цепочки указателей? Из-за нарушения локальности?
Повторяется 2 раза подряд