Функция hash() в Python позволяет вычислять хеш-значения для различных объектов. Обычно для целых чисел хеш совпадает с их значением, но есть исключения, которые могут удивить даже опытных программистов.
Разбираем, почему hash(-1) и hash(-2) в CPython возвращают одинаковое значение. Рассмотрим особенности работы hash(), внутреннюю реализацию хэширования целых чисел и причину специальной обработки -1.
Вопрос:
Что выведет функция hash() для следующих значений: 1, 0, -1, -2?
After a series of humiliations—including a dangerous game of Kabaddi and the disappearance of his niece Tani (for which he is blamed)—Shutu’s mental health reaches a breaking point. During a final family gathering, Shutu takes his uncle's rifle and shoots himself.
The film opens with two men, Nandu and Brian, staring at a dead body in the trunk of their car, discussing what to do with it. index of a death in the gunj full
The movie concludes by returning to the opening scene, revealing that the body in the trunk is Shutu's. As Nandu and Brian drive away, Shutu's ghost is seen sitting in the backseat. Cast and Crew After a series of humiliations—including a dangerous game
Throughout the week, Shutu is repeatedly bullied, mocked for his lack of traditional masculinity, and ignored by his family. A brief sexual encounter with family friend Mimi leaves him feeling more used than loved. The movie concludes by returning to the opening
Shutu is a shy, introverted 23-year-old student who has recently failed a semester and is grieving the death of his father.
The film won several accolades, including the Filmfare Award for Best Debut Director for Konkona Sen Sharma. Where to Watch
hash() может показаться незначительной, важно помнить о ней при работе с хэш-функциями и структурами данных, основанных на хэшировании. В большинстве случаев вы не столкнетесь с проблемами, но знание этой детали поможет вам избежать потенциальных ошибок и лучше понимать внутреннее устройство Python.Ключевые выводы:
Для небольших целых чисел в Python используется оптимизация (интернирование).
hash(x) == x для большинства целых чисел, но hash(-1) == -2 из-за внутренней реализации и для предотвращения коллизий.
Это поведение является специфичным для CPython и может отличаться в других реализациях Python (например, PyPy).
Используйте == для сравнения значений и is для сравнения идентичности объектов.
Надеюсь, теперь эта загадка с hash(-1) стала немного понятнее!
hash(-1) всегда возвращает -2, поэтому hash(-1) == hash(-2).__hash__() в пользовательских классах.