В чём разница между list, tuple и set в Python?

Изменяемость, порядок, повторы и хешируемость трёх коллекций Python: как выбрать подходящую структуру и не потерять данные.

Короткий ответ

Что ответить на собеседовании

list — изменяемая последовательность, tuple — неизменяемая последовательность, set — изменяемое множество уникальных хешируемых элементов без гарантированного порядка. list и tuple допускают повторы и индексирование. set используют для проверки принадлежности и операций над множествами. Кортеж хешируем только тогда, когда хешируемы все его элементы.

Подробный разбор

Ответ с пояснениями

Выбор зависит прежде всего от смысла данных, а не от предположения, что один контейнер «всегда быстрее».

Свойство list tuple set
Изменение состава Да Нет Да
Сохранение порядка последовательности Да Да Не гарантируется
Повторяющиеся элементы Да Да Нет
Доступ по индексу Да Да Нет
Ограничение на элементы Произвольные объекты Произвольные объекты Хешируемые объекты
items = [2, 1, 2]
record = (2, 1, 2)
unique = set(items)  # множество значений 1 и 2

items.append(3)
unique.add(3)
# record[0] = 9  # TypeError

Список подходит для редактируемого набора с порядком и повторами: например, очереди событий. Кортеж — для фиксированного набора значений, например координат. Множество — для проверки принадлежности, пересечения, объединения и разности.

Неизменяемость кортежа относится к его составу, а не рекурсивно ко всему содержимому:

record = ([1], "label")
record[0].append(2)  # допустимо: изменился вложенный список
# hash(record)  # TypeError: внутри нехешируемый list

Сам set тоже нехешируем; для неизменяемого множества существует frozenset. Преобразование списка в множество удаляет повторы и не сохраняет контракт порядка, поэтому это не универсальная замена списка. Для membership в обычной хеш-таблице ожидается O(1), но это средняя оценка, не гарантия для каждого входа. Политика равенства тоже важна: например, 1 и True равны и не дадут два разных элемента множества.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку