Найти тему

Кортежи в Python (tuple)

Кортеж (tuple) — ещё один вид последовательностей в Python.

По своей природе они очень схожи со списками, но, в отличие от последних, являются неизменяемыми.

Пример:

# кортеж
immutable_tuple = (4, 5, 6)
immutable_tuple[0] = 404

>
Traceback (most recent call last):
immutable_tuple[0] = 404
TypeError: 'tuple' object does
not support item assignment

# список
mutable_list = [7, 8, 9]
mutable_list[0] = 1
print(mutable_list)

> [1, 8, 9]

Некоторые особенности кортежей:

  • они упорядочены по позициям;
  • tuple могут хранить и содержать внутри себя объекты любых типов (и даже составных);
  • доступ к элементам происходит по смещению, а не по ключу;
  • в рамках этой структуры данных определены все операции, основанные на применении смещения (индексирование, срез);
  • кортежи поддерживают неограниченное количество уровней вложенности;
  • кортежи хранят указатели на другие объекты, а значит их можно представлять, как массивы ссылок;
  • они позволяют очень просто менять местами значения двух переменных.

Зачем использовать кортеж вместо списка?

Тем, кто уже успел познакомиться со списками в Python, может показаться не очевидным смысл использования кортежей. Ведь фактически, списки могут делать всё то же самое и даже больше. Это вполне естественный вопрос, но, разумеется, у создателей языка найдётся на него ответ:

  • Неизменяемость — именно это свойство кортежей, порой, может выгодно отличать их от списков.
  • Скорость — кортежи быстрее работают. По причине неизменяемости кортежи хранятся в памяти особым образом, поэтому операции с их элементами выполняются заведомо быстрее, чем с компонентами списка.
  • Безопасность — неизменяемость также позволяет им быть идеальными кандидатами на роль констант. Константы, заданные кортежами, позволяют сделать код более читаемым и безопасным.
  • Использование tuple в других структурах данных — кортежи применимы в отдельных структурах данных, от которых python требует неизменяемых значений. Например ключи словарей (dicts) должны состоять исключительно из данных immutable-типа.