Может ли кортеж (tuple) быть ключом словаря в Python?

«Может ли кортеж (tuple) быть ключом словаря в Python?» — вопрос из категории Python, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример допустимого кортежа-ключа:

valid_key = (1, "hello", 3.14)  # Все элементы неизменяемы
my_dict = {valid_key: "значение"}
print(my_dict[(1, "hello", 3.14)])  # Вывод: значение

Пример недопустимого кортежа-ключа:

invalid_key = (1, [2, 3])  # Список внутри кортежа — изменяемый!
# my_dict = {invalid_key: "значение"}  # Вызовет TypeError: unhashable type: 'list'

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