Выбор ответа Middle Типы, изменяемость и сравнение обновлено

Всегда ли кортеж хешируем

Вопрос

Что произойдёт при {(1, [2, 3]): "x"}?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: TypeError: unhashable type: 'list'. Хеш кортежа вычисляется из хешей элементов, а у списка хеша нет.

Варианты ответа

  1. Словарь создастся: кортеж неизменяемый, значит хешируемый
  2. Словарь создастся, но ключ скопируется глубоко
  3. Ключ превратится в строку "(1, [2, 3])"
  4. TypeError: unhashable type: 'list'правильный ответ

Разбор

Хеш кортежа вычисляется из хешей элементов, а у списка хеша нет. Поэтому кортеж со списком внутри не хешируем, хоть и неизменяем сам по себе. Python не копирует ключи и не приводит их к строкам: это поведение JavaScript-объектов, а не dict.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме