← Назад к вопросам

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

1.0 Junior🔥 151 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Tuple и List в Python

Tuple (кортеж) и List (список) — это две фундаментальные структуры данных в Python. Несмотря на схожесть, они имеют принципиальные различия в использовании и поведении.

Основные различия

1. Неизменяемость (Immutability)

Listизменяемая структура данных. Вы можете добавлять, удалять и изменять элементы:

my_list = [1, 2, 3]
my_list[0] = 999  # Можно изменить
my_list.append(4)  # Можно добавить
my_list.pop()      # Можно удалить
print(my_list)  # [999, 2, 3]

Tupleнеизменяемая структура данных. После создания её нельзя изменить:

my_tuple = (1, 2, 3)
my_tuple[0] = 999  # TypeError: tuple object does not support item assignment
my_tuple.append(4)  # AttributeError: tuple object has no attribute append

2. Синтаксис

  • List: квадратные скобки [1, 2, 3]
  • Tuple: круглые скобки (1, 2, 3)

3. Производительность

Tuple быстрее и экономнее по памяти:

import sys

my_list = [1, 2, 3]
my_tuple = (1, 2, 3)

print(sys.getsizeof(my_list))   # 56 байт
print(sys.getsizeof(my_tuple))  # 40 байт

Тупли более эффективны для больших объёмов данных, особенно при часто повторяющихся операциях.

4. Использование как ключи в словарях

Tuple можно использовать как ключ в словаре (потому что он неизменяем и хешируемый):

my_dict = {
    (1, 2): "координата",
    (3, 4): "другая координата"
}
print(my_dict[(1, 2)])  # координата

List нельзя использовать как ключ:

my_dict = {
    [1, 2]: "координата"  # TypeError: unhashable type: list
}

5. Методы

List имеет множество встроенных методов для манипуляции:

my_list = [3, 1, 2]
my_list.append(4)      # Добавить элемент
my_list.sort()         # Отсортировать
my_list.reverse()      # Развернуть
my_list.remove(1)      # Удалить элемент
my_list.insert(0, 0)   # Вставить элемент

Tuple имеет только два метода:

my_tuple = (1, 2, 2, 3)
my_tuple.count(2)      # Подсчитать вхождения элемента
my_tuple.index(2)      # Найти индекс элемента

Практический пример для Data Engineer

В контексте обработки данных различие критично:

# Работа с табличными данными
row_list = [1, "Alice", 100.5, "2024-01-01"]  # Изменяемо
row_tuple = (1, "Alice", 100.5, "2024-01-01")  # Неизменяемо

# Использование в множестве (set) для удаления дубликатов
rows = set()
rows.add((1, "Alice", 100.5))  # OK — tuple хешируем
# rows.add([1, "Alice", 100.5])  # TypeError — list не хешируем

# Использование как ключ при группировке
from collections import defaultdict

grouped = defaultdict(list)
for user_id, country, amount in data:
    grouped[(user_id, country)].append(amount)  # tuple как ключ

Когда использовать что

List используйте когда:

  • Нужна изменяемая коллекция
  • Требуется часто добавлять/удалять элементы
  • Нужны методы сортировки, фильтрации
  • Работаете с динамическими данными

Tuple используйте когда:

  • Данные не должны изменяться (защита от ошибок)
  • Нужен ключ словаря или элемент множества
  • Требуется максимальная производительность
  • Возвращаете несколько значений из функции
  • Работаете с координатами, точками данных, константными наборами значений

Пример с функциями

def get_user_data():
    # Возвращаем tuple — данные неизменяемы
    return (user_id, email, created_at)

user_id, email, created_at = get_user_data()

def process_batch(data):
    # Принимаем список для итерации и модификации
    results = []
    for item in data:
        results.append(transform(item))
    return results

Выбор между tuple и list — это не просто синтаксический выбор, а выбор контракта: list говорит "я могу меняться", а tuple говорит "я константен". Правильное использование этих структур делает код более безопасным и производительным.

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