Чем кортеж отличается от списка и зачем он вообще нужен?
Список и кортеж выглядят почти одинаково. В чём смысл иметь отдельный тип tuple, если есть list?
4 ответа
Главное отличие: список изменяемый, кортеж — нет. После создания кортежа ты не можешь добавить/удалить/заменить элемент.
lst = [1, 2, 3]
lst[0] = 99 # ок
tup = (1, 2, 3)
tup[0] = 99 # TypeError
Зачем нужен кортеж:
- Неизменяемость как защита — данные, которые не должны меняться (координаты, RGB-цвет, запись из БД).
- Кортеж можно сделать ключом словаря или элементом
set(список нельзя — он не хешируется). - Чуть быстрее и легче по памяти.
- Функции, возвращающие несколько значений, на самом деле возвращают кортеж:
return x, y.
Правило большого пальца: однородная коллекция, которую будешь менять → список; фиксированный набор разнородных полей → кортеж.
Если совсем коротко: кортеж = «список только для чтения». Используй, когда хочешь гарантировать, что данные не поменяются.
Кортеж неизменяемый, поэтому его можно хешировать и класть в словарь как ключ — списком так не выйдет.
Кортеж отличается от списка тем, что кортеж неизменяемый, а список изменяемый. Кортеж нужен для защиты данных от случайных изменений, для использования в качестве ключей словаря, для более быстрой работы и экономии памяти, а также для возврата нескольких значений из функций.