В чём разница между list и tuple?
list (список) — изменяемая упорядоченная коллекция, элементы можно добавлять, удалять и изменять по индексу. tuple (кортеж) — упорядоченная, но неизменяемая последовательность: после создания его содержимое менять нельзя. Обычно список используют для данных, которые будут меняться, а кортеж — для фиксированных наборов значений.
Главное различие: изменяемость. И list, и tuple — это последовательности: они хранят элементы по порядку, поддерживают индексацию, срезы и перебор в цикле. Но принципиальное отличие одно:
Список (list) изменяемый (mutable).
Можно менять существующие элементы, добавлять новые, удалять старые (методы
append, extend, insert, remove, pop);Присвоение по индексу
items[0] = ...;Изменение части списка срезом
items[1:3] = [...].
Кортеж (tuple) неизменяемый (immutable).
После создания кортеж нельзя изменить;
нельзя присвоить
t[0] = ...;нельзя удалить элемент
del t[0];Любые «изменения» на самом деле создают новый кортеж. Именно этот аспект — изменяемость — чаще всего ожидают услышать первым в ответе на собеседовании.
Есть и другие отличия, которые стоит упомянуть. Когда рекрутер уточняет: «А кроме изменяемости что-то ещё?», полезно назвать ещё несколько моментов.
Сценарии использования
list логично использовать для коллекций, которые меняются, фильтруются, сортируются — например, список пользователей, задачи в очереди, результаты выборки из базы. tuple хорошо подходит для фиксированных структур: координата (x, y), дата (год, месяц, день), результат функции, возвращающей сразу несколько значений.
Методы и операции
У списков больше методов для изменения содержимого (append, sort, reverse и т.п.). У кортежей набор методов минимален, так как их изменять нельзя.
Производительность и память
Кортежи, как правило, занимают немного меньше памяти и могут итерироваться чуть быстрее за счёт своей неизменяемости. На уровне собеседования достаточно упомянуть, что tuple — более «лёгкая» структура для постоянных данных, а list — более гибкая, но эта гибкость дается немного большей ценой в виде затрат памяти и скорости работы.
Сильный ответ может звучать так:
Оба типа — упорядоченные последовательности, но список — изменяемый, а кортеж — нет. Список используют там, где данные нужно добавлять, удалять или обновлять, кортеж — для фиксированных наборов, например, возврат нескольких значений из функции. Кортежи обычно немного легче по памяти и безопаснее, потому что их нельзя случайно поменять.
Именно вокруг таких формулировок мы строим тренажёры и занятия на курсах TeoBrain: ты сначала отрабатываешь краткий «интервью‑ответ», а затем на практических задачах видишь, где в реальном backend‑коде разумно выбирать list, а где — tuple.