tgoop.com/BookPython/3459
Create:
Last Update:
Last Update:
🔑 Использование объектов в качестве ключей словаря в Python
В Python вы можете использовать любой объект в качестве ключа словаря, если он реализует метод __hash__
. Этот метод возвращает целое число, но при этом важно соблюдать одно ключевое требование: равные объекты должны иметь одинаковый хэш (обратное утверждение необязательно).
👉 Не используйте изменяемые объекты в качестве ключей! Если объект изменяется после добавления в словарь, он становится "невидимым" для поиска, так как его хэш может измениться.
🌀 Странность с отрицательными хэшами
Есть интересная особенность, которая может вас удивить при отладке или написании юнит-тестов. Рассмотрим следующий пример:
class A:
def __init__(self, x):
self.x = x
def __hash__(self):
return self.x
Результаты хэширования экземпляров класса:
>>> hash(A(2))
2
>>> hash(A(1))
1
>>> hash(A(0))
0
>>> hash(A(-1)) # внимание!
-2
>>> hash(A(-2))
-2
💡 В CPython значение
-1
зарезервировано для внутренних ошибок. Если хэш-значение равно -1
, интерпретатор автоматически преобразует его в -2
. Это может вызывать неожиданные проблемы при сравнении или использовании объектов в качестве ключей.👉 @BookPython
BY Библиотека Python разработчика | Книги по питону
Share with your friend now:
tgoop.com/BookPython/3459