Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.
Применение списка и кортежа в качестве ключей словаря
Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Показать, что список, содержащий любые элементы, не может выступать в роли ключа словаря, тогда как кортеж с теми же элементами может.
# TODO: пример с dict, list и tuple
Ответ
Обычный list нехешируем и не подходит для ключа dict. Tuple подходит только тогда, когда все его элементы также хешируемы.
mapping = {}
# mapping[[1, 2]] = 'value' # TypeError: unhashable type: 'list'
mapping[(1, 2)] = 'value'
assert mapping[(1, 2)] == 'value'
Утверждение «кортеж с любыми теми же элементами может быть ключом» требует уточнения:
# mapping[(1, [2])] = 'value' # Тоже TypeError.
Кортеж неизменяем как контейнер, но вложенный список остаётся нехешируемым. Словарю нужны ключи со стабильным хешем и согласованным равенством. Для вложенных структур следует явно строить неизменяемое представление, не рассчитывая, что одного внешнего tuple(...) всегда достаточно.