Чем список (list) отличается от кортежа (tuple) и когда вы выбираете один вместо другого?
В реальной разработке какие данные вы храните в кортежах, а какие - в списках? Приведите конкретный пример из своей практики.
2 ответа
Формальная разница одна — кортеж нельзя менять после создания. Но выбирают между ними не поэтому, а по смыслу данных.
Кортеж — это «запись»: несколько разнородных полей, состав которых фиксирован. Координата (x, y), цвет (r, g, b), возврат нескольких значений из функции. Элементов всегда столько же, позиция означает роль.
Список — однородная коллекция неизвестной заранее длины: задачи, строки файла, пользователи. Элементы приходят и уходят, и все «одного сорта».
Из практики: функция возвращает return status, payload — это кортеж; точки маршрута храню списком кортежей [(55.75, 37.61), (59.93, 30.31)]. Бонусы кортежа: страхует от случайной правки и может быть ключом словаря — координаты как ключ кэша, со списком так не выйдет.
Если полей в «записи» больше трёх и путаетесь в индексах — посмотрите namedtuple или dataclass: тот же смысл, но с именами вместо позиций.
Простой бытовой ориентир: если данные по смыслу константа — дни недели, набор допустимых статусов, настройки — кладу в кортеж. Не потому что список не справится, а чтобы через полгода никакой код, включая мой собственный, случайно туда ничего не дописал. Неизменяемость — защита от будущего себя.