Привет! У начинающих часто возникает вопрос: «Зачем нужны кортежи, если есть списки? Они же почти одинаковые, но списки можно менять, а кортежи — нет. Почему бы всегда не использовать списки?»
На самом деле, у кортежей есть свои суперсилы. В этой статье мы разберём, зачем они нужны и когда их использовать.
В этой статье мы разберём:
- Преимущества кортежей
- Скорость и память
- Безопасность
- Кортежи как ключи словарей
- Распаковка
- Когда использовать tuple, а когда list
- Что нужно знать перед началом
- Основная часть
- Сравнение памяти
- Сравнение скорости
- Безопасность
- Кортежи как ключи словарей
- Распаковка кортежей
- Сравнение tuple и list
- Когда использовать tuple
- Когда использовать list
- Задачи для закрепления
- Нюансы и подводные камни
- Кортеж с изменяемыми элементами
- Кортеж из одного элемента
- Частые ошибки и как их избежать
- Ошибка 1: Использование списка вместо кортежа для констант
- Ошибка 2: Путаница между (1) и (1,)
- Ошибка 3: Попытка изменить кортеж
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание списков и кортежей
Совет: Кортежи — это не «урезанные списки», а отдельный инструмент со своими задачами.
Основная часть
Сравнение памяти
Кортежи занимают меньше памяти, чем списки.
import sys
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
print(f"Список: {sys.getsizeof(my_list)} байт") # 120 байт
print(f"Кортеж: {sys.getsizeof(my_tuple)} байт") # 80 байтСовет: Если данные не изменяются и их много — используй кортеж для экономии памяти.
Сравнение скорости
Кортежи работают быстрее списков.
import timeit
print(timeit.timeit("(1, 2, 3, 4, 5)")) # 0.03 сек
print(timeit.timeit("[1, 2, 3, 4, 5]")) # 0.06 секСовет: Внутренние механизмы Python оптимизируют кортежи сильнее, чем списки.
Безопасность
Кортежи защищают данные от случайных изменений.
# Константы приложения
DAYS_OF_WEEK = ("Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс")
# Со временем кто-то может случайно изменить список
# days = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
# days[0] = "Понедельник" # Можно, но это ошибка
# Кортеж защищает
# DAYS_OF_WEEK[0] = "Понедельник" # TypeError!Важно: Кортеж — это контракт: «эти данные не должны меняться».
Кортежи как ключи словарей
Списки нельзя использовать как ключи словарей, потому что они изменяемы. Кортежи — можно.
# Список как ключ — ошибка
# d = {[1, 2]: "value"} # TypeError
# Кортеж как ключ — работает
d = {(1, 2): "value"}
print(d[(1, 2)]) # value
# Координаты как ключи
locations = {
(55.7558, 37.6173): "Москва",
(59.9343, 30.3351): "СПб"
}
print(locations[(55.7558, 37.6173)]) # МоскваСовет: Кортежи идеально подходят для ключей словарей — координаты, id пользователей, комбинации параметров.
Распаковка кортежей
Кортежи созданы для распаковки.
# Возврат нескольких значений из функции
def get_user():
return "Анна", 25, "Москва"
name, age, city = get_user()
print(name, age, city) # Анна 25 Москва
# Обмен значений
a, b = 5, 10
a, b = b, a
print(a, b) # 10 5Совет: Кортежи — это стандартный способ вернуть несколько значений из функции.
Сравнение tuple и list
| Характеристика | Кортеж (tuple) | Список (list) |
|---|---|---|
| Изменяемость | Нет | Да |
| Память | Меньше | Больше |
| Скорость | Быстрее | Медленнее |
| Ключи словаря | Можно | Нельзя |
| Распаковка | Идеально | Можно, но реже |
| Использование | Константы, ключи, распаковка | Динамические данные |
Когда использовать tuple
| Ситуация | Почему tuple |
|---|---|
| Константы | Не должны меняться |
| Ключи словаря | Только неизменяемые типы |
| Координаты/точки | Логически неделимые объекты |
| Возврат нескольких значений | Стандартный способ |
| Большие данные | Экономия памяти |
| Настройки приложения | Защита от изменений |
Когда использовать list
| Ситуация | Почему list |
|---|---|
| Данные меняются | Добавление, удаление, изменение |
| Неизвестное количество | Списки можно расширять |
| Сортировка | Списки имеют .sort() |
| Чтение из файла | Данные приходят в виде списка |
| Частые изменения | Легче работать с list |
Задачи для закрепления
Задача 1. Что занимает больше памяти: список [1, 2, 3] или кортеж (1, 2, 3)?
Задача 2. Можно ли использовать список как ключ словаря?
Задача 3. Как вернуть несколько значений из функции?
Задача 4. Как поменять местами значения a и b?
Задача 5. Что произойдёт при попытке изменить кортеж?
Ответы:
Задача 1.
# Кортеж занимает меньше памяти.Задача 2.
# Нет, список нельзя использовать как ключ словаря.Задача 3.
# return a, b — возвращает кортеж.Задача 4.
# a, b = b, aЗадача 5.
# TypeError: 'tuple' object does not support item assignmentНюансы и подводные камни
Кортеж с изменяемыми элементами
Кортеж неизменяем, но его элементы могут быть изменяемыми.
t = ([1, 2], [3, 4])
t[0][0] = 99 # OK!
print(t) # ([99, 2], [3, 4])Кортеж из одного элемента
# Не кортеж, а число
t1 = (1)
print(type(t1)) # int
# Кортеж
t2 = (1,)
print(type(t2)) # tupleЧастые ошибки и как их избежать
Ошибка 1: Использование списка вместо кортежа для констант
Используй кортеж для данных, которые не должны меняться.
Ошибка 2: Путаница между (1) и (1,)
Всегда ставь запятую для кортежа из одного элемента.
Ошибка 3: Попытка изменить кортеж
Используй список, если нужны изменения.
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Кортеж | (1, 2, 3) |
| Пустой кортеж | () |
| Кортеж из одного элемента | (1,) |
| Распаковка | a, b = (1, 2) |
| Проверка типа | type(obj) is tuple |
Заключение
Сегодня мы:
- Узнали, зачем нужны кортежи
- Сравнили tuple и list
- Разобрали преимущества кортежей
- Практические примеры








