Встречается на собеседованиях • сегодня

Почему не любой тип данных может быть ключом словаря в Python

В Python ключом словаря может быть только хешируемый (неизменяемый) тип данных. Это связано с внутренней реализацией словарей, которые используют хеш-таблицы для быстрого доступа к значениям.

Хешируемые объекты должны:

  1. Иметь метод __hash__(), который возвращает одно и то же значение на протяжении всего времени жизни объекта
  2. Поддерживать сравнение через __eq__()
  3. Если a == b, то hash(a) == hash(b)

Пример допустимых ключей:

python
d = {
    'str': 1,       # строка
    42: 'answer',    # целое число
    (1, 2): 'tuple'  # кортеж (если содержит только хешируемые элементы)
}

Пример недопустимых ключей:

python
# Списки - изменяемые
d = {[1, 2]: 'error'}  # TypeError: unhashable type: 'list'

# Словари - изменяемые
d = {{'a': 1}: 'error'}  # TypeError: unhashable type: 'dict'
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы