Функция hash() в Python позволяет вычислять хеш-значения для различных объектов. Обычно для целых чисел хеш совпадает с их значением, но есть исключения, которые могут удивить даже опытных программистов.
Разбираем, почему hash(-1) и hash(-2) в CPython возвращают одинаковое значение. Рассмотрим особенности работы hash(), внутреннюю реализацию хэширования целых чисел и причину специальной обработки -1.
Вопрос:
Что выведет функция hash() для следующих значений: 1, 0, -1, -2?
Almost thirty years later, My Life remains the standard for personal storytelling in music. It is a testament to the idea that survival is art. When Mary sings, "When you're feeling down, you should never fake it," she isn’t giving advice; she is taking her own medicine.
At a time when R&B was dominated by polished love songs and pristine vocal deliveries, Blige opened her veins and let her pain bleed onto the tracklist. The result was a classic album that didn't just top the charts—it saved lives. The Backdrop of Pain and Production Mary J Blige My Life zip
: The lead single that served as a manifesto for self-love. Almost thirty years later, My Life remains the
received widespread critical acclaim upon its release and has since been certified 3x Platinum by the RIAA. The album is often cited as one of the greatest hip-hop/R&B albums of all time, influencing a generation of artists, including Lauryn Hill, Missy Elliott, and Beyoncé. At a time when R&B was dominated by
hash() может показаться незначительной, важно помнить о ней при работе с хэш-функциями и структурами данных, основанных на хэшировании. В большинстве случаев вы не столкнетесь с проблемами, но знание этой детали поможет вам избежать потенциальных ошибок и лучше понимать внутреннее устройство Python.Ключевые выводы:
Для небольших целых чисел в Python используется оптимизация (интернирование).
hash(x) == x для большинства целых чисел, но hash(-1) == -2 из-за внутренней реализации и для предотвращения коллизий.
Это поведение является специфичным для CPython и может отличаться в других реализациях Python (например, PyPy).
Используйте == для сравнения значений и is для сравнения идентичности объектов.
Надеюсь, теперь эта загадка с hash(-1) стала немного понятнее!
hash(-1) всегда возвращает -2, поэтому hash(-1) == hash(-2).__hash__() в пользовательских классах.