Функция hash() в Python позволяет вычислять хеш-значения для различных объектов. Обычно для целых чисел хеш совпадает с их значением, но есть исключения, которые могут удивить даже опытных программистов.
Разбираем, почему hash(-1) и hash(-2) в CPython возвращают одинаковое значение. Рассмотрим особенности работы hash(), внутреннюю реализацию хэширования целых чисел и причину специальной обработки -1.
Вопрос:
Что выведет функция hash() для следующих значений: 1, 0, -1, -2?
The genre has mirrored shifting societal values over the decades:
Today, the landscape of romantic entertainment is more inclusive and varied than ever before. Modern romantic dramas tackle themes that previous generations ignored. We see stories that explore LGBTQ+ relationships ( Normal People , Past Lives ), the intersections of race and culture, and the impact of mental health on intimacy. Furthermore, the digital age has introduced new narrative devices, exploring how texting, social media, and long-distance apps change the choreography of falling in love. Why Audiences Crave Emotional Intensity phonerotica mobile porn
Psychological hurdles, including past emotional trauma, fear of vulnerability, and conflicting personal ambitions, compel characters to grow before they can successfully unite. The genre has mirrored shifting societal values over
Relationships challenged by social class, family feuds, or cultural barriers. Furthermore, the digital age has introduced new narrative
The DNA of modern romantic entertainment can be traced back to classical literature. William Shakespeare’s Romeo and Juliet established the definitive framework for the "us against the world" archetype, proving that societal conflict elevates personal romance into high stakes drama. In the 19th century, authors like Jane Austen and the Brontë sisters introduced sharp social commentary, socioeconomic barriers, and psychological depth to the genre, creating templates that Hollywood still uses today.
hash() может показаться незначительной, важно помнить о ней при работе с хэш-функциями и структурами данных, основанных на хэшировании. В большинстве случаев вы не столкнетесь с проблемами, но знание этой детали поможет вам избежать потенциальных ошибок и лучше понимать внутреннее устройство Python.Ключевые выводы:
Для небольших целых чисел в Python используется оптимизация (интернирование).
hash(x) == x для большинства целых чисел, но hash(-1) == -2 из-за внутренней реализации и для предотвращения коллизий.
Это поведение является специфичным для CPython и может отличаться в других реализациях Python (например, PyPy).
Используйте == для сравнения значений и is для сравнения идентичности объектов.
Надеюсь, теперь эта загадка с hash(-1) стала немного понятнее!
hash(-1) всегда возвращает -2, поэтому hash(-1) == hash(-2).__hash__() в пользовательских классах.