В чем разница между кортежем (tuple) и списком (list) в Python?

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

Ответ

Основное отличие — изменяемость (mutability), что влечёт за собой различия в использовании и производительности.

Характеристика Список (list) Кортеж (tuple)
Изменяемость Изменяемый (mutable). Элементы можно изменять, добавлять, удалять. Неизменяемый (immutable). После создания элементы изменить нельзя.
Синтаксис Квадратные скобки: [1, 2, 3] Круглые скобки (часто опциональны): (1, 2, 3) или 1, 2, 3
Производительность Медленнее при итерации, занимает больше памяти из-за накладных расходов на изменение. Быстрее, занимает меньше памяти, так как структура фиксирована.
Использование Для коллекций, которые могут меняться (динамические данные). Для константных коллекций (ключи словаря, возврат нескольких значений из функции).
Хэшируемость Не хэшируем (не может быть ключом словаря). Хэшируем, если все его элементы хэшируемы (может быть ключом словаря).

Примеры:

# Список — можно изменить
my_list = [1, 2, 3]
my_list[0] = 10      # OK: [10, 2, 3]
my_list.append(4)    # OK: [10, 2, 3, 4]

# Кортеж — изменить нельзя
my_tuple = (1, 2, 3)
# my_tuple[0] = 10   # TypeError: 'tuple' object does not support item assignment

# Практическое применение кортежа
def get_user_info(user_id):
    # Возврат нескольких значений как единой неизменяемой структуры
    name = "Alice"
    role = "Admin"
    return (user_id, name, role)  # или просто return user_id, name, role

# Использование как ключа словаря (только если элементы хэшируемы)
cache = {}
key = ("api", "v1", 123)
cache[key] = "cached_data"