Зачем нужны кортежи, если есть списки

Зачем нужны кортежи, если есть списки Списки, словари, кортежи

Привет! У начинающих часто возникает вопрос: «Зачем нужны кортежи, если есть списки? Они же почти одинаковые, но списки можно менять, а кортежи — нет. Почему бы всегда не использовать списки?»

На самом деле, у кортежей есть свои суперсилы. В этой статье мы разберём, зачем они нужны и когда их использовать.

В этой статье мы разберём:

  • Преимущества кортежей
  • Скорость и память
  • Безопасность
  • Кортежи как ключи словарей
  • Распаковка
  • Когда использовать tuple, а когда list

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный 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
  • Разобрали преимущества кортежей
  • Практические примеры

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×