Python Glossary English

Python 3.3+collectionsпонятие

collections.abc.Hashable

collections.abc — протоколы

Протокол «хешируемый» (есть __hash__): можно класть в set / ключом dict.

Синтаксис

isinstance(obj, collections.abc.Hashable)

Проверка означает лишь, что у типа __hash__ не выставлен в None, а вовсе не то, что хеш реально посчитается. Классический пример — кортеж со списком внутри: проверку он пройдёт, а hash() на нём упадёт с TypeError, потому что хеш кортежа считается по его элементам. Если нужна настоящая гарантия, надёжнее один раз позвать hash() в try/except, чем полагаться на isinstance.

Примеры

import collections.abc as abc
print(isinstance(1, abc.Hashable))    # → True
print(isinstance([], abc.Hashable))   # → False
print(isinstance('abc', abc.Hashable))   # → True
print(isinstance({1: 2}, abc.Hashable))   # → False
print(isinstance(([1], 2), abc.Hashable))   # → True
print(hash(([1], 2)))   # → TypeError

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности