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

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

1.3 Junior🔥 131 комментариев
#Python Core

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

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

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

Разница между списками и кортежами

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

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

Изменяемость (Mutability)

Самое важное отличие — списки изменяемы, а кортежи неизменяемы:

# Список — изменяемый тип
my_list = [1, 2, 3]
my_list[0] = 99  # OK
my_list.append(4)  # OK

# Кортеж — неизменяемый тип
my_tuple = (1, 2, 3)
my_tuple[0] = 99  # TypeError: tuple object does not support item assignment
my_tuple.append(4)  # AttributeError: tuple object has no attribute append

Синтаксис и производительность

Кортежи синтаксически проще (скобки опциональны) и работают быстрее из-за оптимизаций интерпретатора:

# Список
my_list = [1, 2, 3]

# Кортеж (скобки опциональны)
my_tuple = 1, 2, 3  # Валидный синтаксис
my_tuple = (1, 2, 3)  # Также валидно

Кортежи занимают меньше памяти и создаются быстрее, потому что Python может применять оптимизации к неизменяемым структурам.

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

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

# Доступные методы списка
my_list.sort()  # OK
my_list.reverse()  # OK
my_list.remove(1)  # OK
my_list.pop()  # OK
my_list.insert(0, 10)  # OK

# Методы кортежа (только count и index)
my_tuple.count(1)  # OK — возвращает 2
my_tuple.index(2)  # OK — возвращает 2

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

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

# Кортеж как ключ
coords = {(10, 20): "point A", (30, 40): "point B"}

# Список как ключ — ошибка
try:
    bad_dict = {[10, 20]: "point A"}  # TypeError: unhashable type: list
except TypeError as e:
    print(e)

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

Используй списки:

  • Когда данные часто меняются
  • Нужны методы модификации (append, remove, sort)
  • Коллекция гетерогенных элементов

Используй кортежи:

  • Данные не должны меняться
  • Нужна хешируемость (ключи словаря, элементы set)
  • Возврат нескольких значений из функции
  • Защита от случайных изменений
# Возврат нескольких значений
def get_coordinates():
    return 10, 20  # Кортеж без скобок

x, y = get_coordinates()  # Распаковка

# Неизменяемость как защита
def process_data(data):
    # Кортеж гарантирует, что функция не изменит данные
    pass

process_data((1, 2, 3))

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

Кортежи обычно работают быстрее на больших объемах:

import timeit

# Создание списка медленнее
list_time = timeit.timeit("[1, 2, 3, 4, 5]", number=1000000)

# Создание кортежа быстрее
tuple_time = timeit.timeit("(1, 2, 3, 4, 5)", number=1000000)

print(f"Список: {list_time:.3f}s, Кортеж: {tuple_time:.3f}s")

В заключение: выбор между списком и кортежем зависит от нужной изменяемости и конкретного сценария использования.