Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: dictionary, key, tuple

Могут ли два кортежа (один пустой, второй с пустым списком) быть ключами?

Вопрос проверяет понимание требований к ключам словаря в Python, в частности, свойство неизменяемости (immutability).

Короткий ответ

Пустой кортеж () может быть ключом словаря, так как кортеж является неизменяемой структурой данных. Кортеж, содержащий пустой список ([], ), не может быть ключом. Список — это изменяемый объект, и даже будучи внутри кортежа, он делает весь кортеж непригодным для использования в качестве ключа. Попытка использовать такой кортеж вызовет ошибку TypeError.

Длинный ответ

Ключом в словаре Python может быть только хешируемый объект. Главное требование к такому объекту — его неизменяемость (immutability).

Почему один кортеж подходит, а другой — нет:

  1. Пустой кортеж ():

    • Кортеж сам по себе является неизменяемой структурой. Пустой кортеж не содержит элементов, которые можно изменить.

    • Он успешно проходит хеширование, и Python может использовать его для однозначной идентификации записи в словаре.

    • Пример:

      my_dict = {}
      my_dict[()] = "Empty tuple"  # Это сработает
      print(my_dict[()])  # Выведет: Empty tuple
  2. Кортеж с пустым списком ([], ):

    • Хотя кортеж-оболочка неизменяем, содержащийся в нем список является изменяемым объектом. Наличие изменяемого объекта внутри делает весь кортеж нехешируемым.

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

    • Пример (который вызовет ошибку):

      my_dict = {}
      # my_dict[([], )] = "This will fail"  # Вызовет TypeError: unhashable type: 'list'

Вывод: Ключ словаря должен быть абсолютно неизменяемым. Даже вложенные элементы должны подчиняться этому правилу.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • Python

    Python

Ключевые слова

#dictionary

#key

#tuple

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.