Получить доступ

Чем список отличается от кортежа?

JuniorКоллекции
Ещё спрашивают так:
  • В чём разница между list и tuple?
  • Когда использовать кортеж вместо списка?
Коротко

Список изменяемый, кортеж — нет; отсюда остальные различия.

  • Кортеж может быть ключом словаря (если элементы хешируемы)
  • Кортеж чуть легче по памяти и быстрее создаётся

А ещё Смысл: список — набор однотипных элементов, кортеж — запись с фиксированной структурой

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Оба — упорядоченные последовательности с доступом по индексу и срезами. Главное отличие — изменяемость.

Список (list) можно менять: append, insert, remove, sort, присваивание по индексу. Python выделяет ему память с запасом, чтобы append был быстрым.

Кортеж (tuple) после создания не меняется. Из этого следует:

  • он хешируем, если хешируемы все элементы, — значит, годится в ключ dict и в set;
  • занимает немного меньше памяти и создаётся быстрее; кортежи из констант компилятор может создать заранее;
  • его безопасно отдавать наружу: никто не изменит его содержимое.

По смыслу: список — коллекция однородных элементов переменной длины («список пользователей»), кортеж — запись, где позиция имеет значение («координаты (x, y)», «строка из базы»). Для записей с именованными полями есть collections.namedtuple и typing.NamedTuple.

Кортеж из одного элемента пишется с запятой: (1,). Без неё (1) — просто число в скобках.

Пример

point = (10, 20)
x, y = point                    # распаковка
cache = {point: "клетка"}       # кортеж как ключ

items = [3, 1, 2]
items.sort()                    # список меняется на месте

single = (1,)                   # кортеж из одного элемента
not_tuple = (1)                 # это int

from typing import NamedTuple
class User(NamedTuple):
    id: int
    name: str

Что хотят услышать

  • Изменяемость как корень различий.
  • Хешируемость кортежа и использование в ключах словаря.
  • Различие по смыслу: однородная коллекция против записи.
  • Знание namedtuple и записи (1,).

Частые ошибки

  • «Кортеж намного быстрее списка» — разница небольшая, выбирают по смыслу.
  • Забыть запятую в кортеже из одного элемента.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем