tgoop.com/BookPython/3669
Create:
Last Update:
Last Update:
В Python можно использовать любой объект в качестве ключа словаря, если он реализует метод __hash__
. Этот метод может возвращать любое целое число, но есть одно обязательное условие: равные объекты должны иметь одинаковые хэши (обратное не обязательно).
Также не стоит использовать изменяемые объекты в качестве ключей, потому что если объект изменится и станет не равным самому себе в прошлом, его больше нельзя будет найти в словаре.
Есть и один странный момент, который может удивить во время отладки или написания unit-тестов:
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
зарезервировано для внутренних ошибок, поэтому оно неявно преобразуется в -2
.👉@BookPython
BY Библиотека Python разработчика | Книги по питону
Share with your friend now:
tgoop.com/BookPython/3669