Ключом словаря может быть любой хешируемый неизменяемый объект: число, строка, datetime, функция и даже модуль. Такие объекты имеют метод
__hash__()
, который однозначно сопоставляет объект с некоторым числом. По этому числу словарь ищет значение для ключа.Списки, словари и множества изменяемы и не имеют метода хеширования. При подстановке их в словарь возникнет ошибка.
Хеш кортежа вычисляется рекурсивно по всем элементам. Так, кортеж
(1, (True, (42, ('hello', ))))
состоит только из неизменяемых элементов, поэтому может быть ключом. Однако, такой кортеж(1, (True, (42, ({'hello': 'world'}, ))))
содержит глубоко внутри словарь, поэтому хеш не может быть рассчитан.@python_job_interview