Привет! Ты уже знаком со списками — изменяемыми коллекциями, которые можно менять. Но в Python есть и кортежи (tuple) — неизменяемые коллекции. Они похожи на списки, но их нельзя изменить после создания.
В этой статье мы разберём:
- Что такое кортеж
- Создание кортежей
- Доступ к элементам
- Методы кортежей
- Разница между tuple и list
- Когда использовать кортежи
- Что нужно знать перед началом
- Основная часть
- Что такое кортеж
- Создание кортежа
- Доступ к элементам
- Кортежи неизменяемы
- Методы кортежей
- Распаковка кортежей
- Кортежи в функциях
- Tuple vs List
- Задачи для закрепления
- Нюансы и подводные камни
- Кортеж из одного элемента
- Пустой кортеж
- Кортежи с изменяемыми элементами
- Частые ошибки и как их избежать
- Ошибка 1: Попытка изменить кортеж
- Ошибка 2: Забыл запятую для одного элемента
- Ошибка 3: Путаница между tuple и list
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание списков
Совет: Кортежи — это «замороженные» списки. Они занимают меньше памяти и работают быстрее.
Основная часть
Что такое кортеж
Кортеж (tuple) — это неизменяемая упорядоченная коллекция элементов.
# Создание кортежа
my_tuple = (1, 2, 3)
print(my_tuple) # (1, 2, 3)
# Кортеж может содержать разные типы
mixed = (1, "hello", 3.14, True)
print(mixed) # (1, 'hello', 3.14, True)
# Пустой кортеж
empty = ()
print(empty) # ()Важно: Кортежи неизменяемы — их нельзя изменить после создания.
Создание кортежа
# С круглыми скобками
t1 = (1, 2, 3)
# Без скобок (запятая создаёт кортеж)
t2 = 1, 2, 3
print(t2) # (1, 2, 3)
# Кортеж из одного элемента (обязательно запятая!)
t3 = (1,)
print(t3) # (1,)
# Из списка
t4 = tuple([1, 2, 3])
print(t4) # (1, 2, 3)
# Из строки
t5 = tuple("hello")
print(t5) # ('h', 'e', 'l', 'l', 'o')Совет: Для кортежа из одного элемента запятая обязательна. Иначе это просто число в скобках.
Доступ к элементам
my_tuple = (10, 20, 30, 40, 50)
# По индексу
print(my_tuple[0]) # 10
print(my_tuple[2]) # 30
# Отрицательные индексы
print(my_tuple[-1]) # 50
print(my_tuple[-2]) # 40
# Срезы
print(my_tuple[1:4]) # (20, 30, 40)
print(my_tuple[::2]) # (10, 30, 50)Совет: Доступ к элементам кортежа работает так же, как у списков.
Кортежи неизменяемы
my_tuple = (1, 2, 3)
# Попытка изменить элемент вызывает ошибку
# my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
# Попытка добавить элемент вызывает ошибку
# my_tuple.append(4) # AttributeError: 'tuple' object has no attribute 'append'
# Попытка удалить элемент вызывает ошибку
# del my_tuple[0] # TypeError: 'tuple' object doesn't support item deletionВажно: Кортежи нельзя изменять, добавлять или удалять элементы.
Методы кортежей
У кортежей всего два метода:
my_tuple = (1, 2, 3, 2, 4, 2)
# count() — количество вхождений
print(my_tuple.count(2)) # 3
# index() — индекс первого вхождения
print(my_tuple.index(3)) # 2
print(my_tuple.index(2)) # 1 (первое вхождение)Совет: Так как кортежи неизменяемы, у них нет методов для изменения (
append,pop,insert).
Распаковка кортежей
# Распаковка в переменные
coordinates = (10, 20)
x, y = coordinates
print(x, y) # 10 20
# Игнорирование значений
person = ("Анна", 25, "Москва")
name, _, city = person
print(name, city) # Анна Москва
# Расширенная распаковка (*)
numbers = (1, 2, 3, 4, 5)
first, *rest = numbers
print(first) # 1
print(rest) # [2, 3, 4, 5]Совет: Распаковка кортежей очень удобна для возврата нескольких значений из функций.
Кортежи в функциях
# Возврат нескольких значений
def get_user():
return "Анна", 25, "Москва"
name, age, city = get_user()
print(name, age, city) # Анна 25 Москва
# Кортеж как аргумент
def print_coordinates(coords):
print(f"X: {coords[0]}, Y: {coords[1]}")
point = (10, 20)
print_coordinates(point) # X: 10, Y: 20Tuple vs List
| Характеристика | Tuple | List |
|---|---|---|
| Изменяемость | Нет | Да |
| Синтаксис | (1, 2, 3) | [1, 2, 3] |
| Память | Меньше | Больше |
| Скорость | Быстрее | Медленнее |
| Методы | count(), index() | Много методов |
| Использование | Данные, которые не должны меняться | Данные, которые могут меняться |
Задачи для закрепления
Задача 1. Создай кортеж из чисел 1, 2, 3, 4, 5.
Задача 2. Получи второй элемент кортежа.
Задача 3. Сколько раз число 3 встречается в кортеже (1, 3, 2, 3, 4, 3)?
Задача 4. Попробуй изменить первый элемент кортежа. Что произойдёт?
Задача 5. Распакуй кортеж (100, 200, 300) в переменные a, b, c.
Ответы:
Задача 1.
my_tuple = (1, 2, 3, 4, 5)
print(my_tuple) # (1, 2, 3, 4, 5)Задача 2.
print(my_tuple[1]) # 2Задача 3.
my_tuple = (1, 3, 2, 3, 4, 3)
print(my_tuple.count(3)) # 3Задача 4.
# TypeError: 'tuple' object does not support item assignmentЗадача 5.
a, b, c = (100, 200, 300)
print(a, b, c) # 100 200 300Нюансы и подводные камни
Кортеж из одного элемента
# Неправильно (это просто число)
t1 = (1)
print(type(t1)) # <class 'int'>
# Правильно
t2 = (1,)
print(type(t2)) # <class 'tuple'>Пустой кортеж
empty = ()
print(type(empty)) # <class 'tuple'>Кортежи с изменяемыми элементами
# Кортеж может содержать изменяемые объекты
t = ([1, 2], [3, 4])
t[0][0] = 99 # OK — изменяем список внутри кортежа
print(t) # ([99, 2], [3, 4])
# Но нельзя изменить сам кортеж
# t[0] = [5, 6] # TypeErrorЧастые ошибки и как их избежать
Ошибка 1: Попытка изменить кортеж
Используй список, если нужна изменяемая коллекция.
Ошибка 2: Забыл запятую для одного элемента
Всегда ставь запятую: (1,).
Ошибка 3: Путаница между tuple и list
Используй кортеж для данных, которые не должны меняться (например, координаты, настройки).
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Создать кортеж | (1, 2, 3) |
| Пустой кортеж | () |
| Кортеж из одного элемента | (1,) |
| Доступ по индексу | t[0] |
| Срез | t[1:3] |
| Количество элементов | len(t) |
| Количество вхождений | t.count(x) |
| Индекс элемента | t.index(x) |
| Распаковка | a, b = t |
Заключение
Сегодня мы:
- Узнали, что такое кортеж
- Научились создавать и использовать кортежи
- Разобрали методы и особенности
- Сравнили tuple и list








