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

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

Ответ

Основное различие заключается в изменяемости (mutability).

  • Список (list) — это изменяемая (mutable) последовательность. После создания можно добавлять, удалять и изменять элементы.
  • Кортеж (tuple) — это неизменяемая (immutable) последовательность. После создания его содержимое изменить нельзя.

Синтаксис:

my_list = [1, 2, 3]  # Квадратные скобки
my_tuple = (1, 2, 3) # Круглые скобки (или просто 1, 2, 3)

Практические последствия и примеры:

  1. Изменение элементов:

    my_list = [1, 2, 3]
    my_list[0] = 99  # Допустимо. Теперь список [99, 2, 3]
    
    my_tuple = (1, 2, 3)
    my_tuple[0] = 99  # Вызовет TypeError: 'tuple' object does not support item assignment
  2. Использование в качестве ключа словаря: Из-за неизменяемости кортежи могут быть ключами словаря, а списки — нет.

    valid_dict = {(1, 2): "coordinates"}  # Корректно
    invalid_dict = {[1, 2]: "list"}       # Вызовет TypeError: unhashable type: 'list'
  3. Производительность и намерения: Кортежи обычно работают немного быстрее и занимают меньше памяти. Их использование сигнализирует о том, что данные являются константными (например, точка (x, y), запись из БД). Списки предназначены для динамических коллекций.

Резюме: Используйте список, когда коллекция должна меняться. Используйте кортеж для фиксированных наборов данных, которые должны оставаться неизменными.