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

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

1.2 Junior🔥 121 комментариев
#Python

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

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

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

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

Основное различие: Изменяемость

Список (list) — это изменяемая (mutable) структура данных. Вы можете добавлять, удалять и изменять элементы после создания.

Картеж (tuple) — это неизменяемая (immutable) структура данных. После создания вы не можете изменить его содержимое.

Это фундаментальное различие определяет все остальные характеристики и область использования.

Синтаксис и создание

# Список — квадратные скобки
my_list = [1, 2, 3, "apple"]
my_list[0] = 99  # ✅ Работает
my_list.append(4)  # ✅ Работает

# Картеж — круглые скобки
my_tuple = (1, 2, 3, "apple")
my_tuple[0] = 99  # ❌ TypeError: tuple does not support item assignment
my_tuple.append(4)  # ❌ AttributeError: tuple has no attribute append

# Сингл-элементный картеж требует запятую
single_tuple = (42,)  # Картеж с одним элементом
single_value = (42)   # Это просто число в скобках!

Методы и операции

Список имеет много методов:

my_list = [3, 1, 2]
my_list.append(4)      # Добавить элемент
my_list.remove(2)      # Удалить элемент
my_list.sort()         # Отсортировать
my_list.reverse()      # Реверс
my_list.extend([5, 6]) # Расширить
my_list.pop()          # Удалить последний

Картеж имеет минимум методов:

my_tuple = (3, 1, 2, 1)
count = my_tuple.count(1)   # Сколько раз встречается элемент
index = my_tuple.index(2)   # Индекс первого вхождения
# Больше ничего! Это сделано намеренно.

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

Картеж быстрее:

import timeit

# Картеж создается быстрее
print(timeit.timeit("(1, 2, 3, 4, 5)", number=1000000))
# Результат: ~0.04 сек

# Список создается медленнее
print(timeit.timeit("[1, 2, 3, 4, 5]", number=1000000))
# Результат: ~0.06 сек

# Доступ к элементу одинаков
my_tuple = (1, 2, 3) * 1000
my_list = [1, 2, 3] * 1000
# Скорость доступа одинакова

Использование в качестве ключей

Картеж можно использовать как ключ словаря (hashable):

# ✅ Картеж — hashable
coords = {(10, 20): "точка A", (30, 40): "точка B"}
print(coords[(10, 20)])  # точка A

set_of_positions = {(1, 1), (2, 2), (3, 3)}  # Картежи в set

# ❌ Список нельзя использовать как ключ
positions = {[1, 1]: "point"}  # TypeError: unhashable type: list

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

Используйте СПИСОК когда:

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

Используйте КАРТЕЖ когда:

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

Примеры в контексте тестирования

# Возврат нескольких значений — картеж
def get_test_credentials():
    return ("user@test.com", "password123")

email, password = get_test_credentials()  # Распаковка картежа

# Набор предустановленных тестовых данных
test_data = (
    ("valid_email@test.com", True),
    ("invalid_email", False),
    ("", False),
)

for email, expected_result in test_data:
    result = validate_email(email)
    assert result == expected_result

# Кэш статус-кодов
status_codes = {
    (200,): "OK",
    (201,): "Created",
    (400,): "Bad Request",
}

Резюме таблица

ХарактеристикаСписокКартеж
Синтаксис[1, 2, 3](1, 2, 3)
ИзменяемостьMutableImmutable
ПроизводительностьМедленнееБыстрее
HashableНетДа
МетодовМногоМало
Как ключ dictНетДа
БезопасностьМенее безопасенБолее безопасен
Распаковкаa, b = lista, b = tuple

Выбирайте листы для гибкости, картежи для надежности и производительности.