Функция hash в Python возвращает одинаковое значение для -1 и -2, потому что разработчики намеренно сделали так, чтобы hash(-1) всегда равнялось -2. 1
Это решение принято для предотвращения потенциальных коллизий хэшей с объектами других типов. 1 Если бы hash(-1) также возвращало -1, это привело бы к коллизии хэшей при использовании объекта и целого числа -1 в словаре или множестве. 1 Чтобы избежать этой проблемы, hash(-1) было сделано равным -2, чтобы отделить его от потенциальных хэш-значений других типов объектов. 1
Такое поведение характерно для CPython и может отличаться в других реализациях Python (например, PyPy). 12