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Сообщить о неточности