Кортежи в Python (tuple): зачем нужны, чем отличаются от списков и как использовать
Кортежи в Python — одна из базовых структур данных, которую новички часто недооценивают. На первый взгляд tuple похож на список: в нём тоже можно хранить несколько значений и обращаться к ним по индексу. Главное отличие в том, что кортеж неизменяем: после создания нельзя добавить, удалить или заменить элемент.
Поисковый запрос, на который отвечает эта статья: «кортежи в Python tuple примеры». Разберём не теорию ради теории, а реальные ситуации, где tuple делает код понятнее и безопаснее.
Что такое кортеж в Python
Кортеж — это упорядоченная коллекция элементов. Создаётся он с помощью круглых скобок или просто через запятую:
point = (10, 20)
user = 'Анна', 25, 'Python'
print(point[0]) # 10
print(user[2]) # Python
Круглые скобки улучшают читаемость, поэтому в большинстве случаев лучше писать их явно.
Кортеж из одного элемента: важная деталь
Одна из самых частых ошибок новичков — забыть запятую при создании кортежа из одного элемента.
not_tuple = (5)
real_tuple = (5,)
print(type(not_tuple)) # <class 'int'>
print(type(real_tuple)) # <class 'tuple'>
В Python кортеж определяет не скобка, а запятая. Скобки лишь группируют выражение.
Чем tuple отличается от list
Список можно изменять, а кортеж нельзя. Это делает tuple хорошим выбором для данных, структура которых не должна меняться.
numbers = [1, 2, 3]
numbers[0] = 100
print(numbers) # [100, 2, 3]
coords = (1, 2, 3)
# coords[0] = 100 # TypeError: 'tuple' object does not support item assignment
Выбирайте list, если коллекция будет пополняться, сортироваться или изменяться. Выбирайте tuple, если набор значений фиксирован: координаты, RGB-цвет, дата, результат функции.
Практический пример: координаты и размеры
Кортеж удобно использовать там, где важен порядок и фиксированное количество элементов:
position = (120, 45)
size = (800, 600)
color = (255, 120, 0)
x, y = position
width, height = size
red, green, blue = color
print(f'Позиция: x={x}, y={y}')
print(f'Размер: {width}x{height}')
Такой код читается лучше, чем набор отдельных переменных без явной связи между ними.
Распаковка кортежей
Распаковка — одна из самых полезных возможностей tuple. Она позволяет быстро разложить элементы по переменным.
person = ('Иван', 31, 'разработчик')
name, age, job = person
print(name) # Иван
print(age) # 31
print(job) # разработчик
Если элементов слишком много или слишком мало, Python выдаст ошибку. Это полезно: программа сразу покажет, что структура данных не соответствует ожиданиям.
person = ('Иван', 31, 'разработчик')
# name, age = person
# ValueError: too many values to unpack
Распаковка со звёздочкой
Если нужно забрать первый и последний элемент, а середину собрать отдельно, используйте оператор *:
grades = ('Аня', 5, 4, 5, 3, 5)
name, *marks = grades
print(name) # Аня
print(marks) # [5, 4, 5, 3, 5]
Обратите внимание: переменная со звёздочкой получает список, а не кортеж.
Возврат нескольких значений из функции
В Python функция может возвращать несколько значений. На самом деле она возвращает кортеж, который затем можно распаковать.
def get_min_max(numbers):
return min(numbers), max(numbers)
values = [8, 3, 10, 1, 6]
minimum, maximum = get_min_max(values)
print(minimum) # 1
print(maximum) # 10
Это частый и красивый приём. Он избавляет от лишних словарей и классов там, где нужно вернуть всего 2–3 связанных значения.
Кортежи как ключи словаря
Так как tuple неизменяем, его можно использовать как ключ словаря — при условии, что внутри тоже лежат неизменяемые объекты.
temperatures = {
('Москва', '2026-01-10'): -5,
('Казань', '2026-01-10'): -8,
('Сочи', '2026-01-10'): 7,
}
key = ('Москва', '2026-01-10')
print(temperatures[key]) # -5
Такой подход удобен для составных ключей: город + дата, пользователь + товар, координата X + координата Y.
Методы tuple: count и index
У кортежей мало методов, потому что они неизменяемы. Основные — count() и index().
items = ('python', 'sql', 'python', 'html')
print(items.count('python')) # 2
print(items.index('sql')) # 1
count() считает количество вхождений, а index() возвращает индекс первого найденного элемента. Если элемента нет, index() вызовет ошибку ValueError.
Неизменяемость не всегда глубокая
Важный нюанс: сам кортеж изменить нельзя, но если внутри лежит изменяемый объект, например список, его содержимое менять можно.
data = (1, 2, ['a', 'b'])
data[2].append('c')
print(data) # (1, 2, ['a', 'b', 'c'])
# data[0] = 100 # нельзя
Поэтому не стоит считать tuple абсолютной защитой от любых изменений. Он защищает структуру кортежа, но не обязательно вложенные объекты.
Когда использовать кортежи: рекомендации
- Используйте tuple для фиксированных наборов данных: координат, размеров, диапазонов, пар значений.
- Возвращайте кортеж из функции, если нужно вернуть несколько простых связанных результатов.
- Используйте кортежи как ключи словаря для составных идентификаторов.
- Не используйте tuple только ради «ускорения» кода: сначала думайте о смысле данных.
- Если у элементов есть сложная бизнес-логика и имена полей важнее порядка, лучше рассмотреть dataclass или namedtuple.
Мини-практика: статистика по заказам
Рассмотрим небольшой пример. Пусть заказ представлен кортежем: имя клиента, сумма и статус.
orders = [
('Анна', 1200, 'paid'),
('Игорь', 700, 'new'),
('Мария', 2300, 'paid'),
('Олег', 400, 'cancelled'),
]
total_paid = 0
for customer, amount, status in orders:
if status == 'paid':
total_paid += amount
print(f'Оплачено на сумму: {total_paid}')
Кортеж здесь подходит, потому что каждый заказ имеет фиксированную структуру. Но если полей станет много, лучше перейти к словарям, dataclass или объектам.
Типичные ошибки новичков
- Забывают запятую в кортеже из одного элемента: нужно
(value,). - Пытаются изменить элемент кортежа по индексу, как в списке.
- Используют tuple для больших разнородных структур, где непонятно, что означает каждый индекс.
- Делают код менее читаемым, возвращая из функции слишком много значений сразу.
Если вы хотите системно разобраться не только с кортежами, но и со всеми базовыми конструкциями языка, практическими задачами и переходом к уверенной разработке, посмотрите курс «Python с Нуля до Гуру» — пошаговый путь от основ к реальным программам.
Вывод
Кортежи в Python нужны не «вместо списков», а для других задач. Tuple хорошо подходит для неизменяемых, упорядоченных и фиксированных наборов данных. Он делает намерение программиста понятнее: если значение лежит в кортеже, значит его структура не должна меняться. Освойте создание, распаковку и возврат кортежей из функций — эти приёмы постоянно встречаются в реальном Python-коде.
-
Создано 07.09.2026 17:00:36
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.