Кортежи (tuple)

Кортеж еще один тип для работы с множествами в Python, он очень похож на список list, но после того как кортеж создан уже нельзя менять его элементы. Типы данных которые нельзя менять еще называются иммутабельные. Кортеж — это неизменяемый список, или иммутабельный список. Удобно использовать кортеж если вы получили откуда-то список элементов, но точно уверенны, что менять его вам не придется.

Формат создания кортежа такой же как и для списка, единственное отличие в том какие скобки используются. В отличии от списка для создания используются круглые скобки:

>>> fruits = ("яблоки", "бананы", "помидоры")
>>> fruits
('яблоки', 'бананы', 'помидоры')
>>> type(fruits)
<class 'tuple'>

Создадим кортеж с помощью конструктора:

>>> tuple(('персик', 'слива'))  # или tuple(['персик', 'слива'])
('персик', 'слива')

Если нужно создать кортеж состоящий из одного элемента, то чтобы не путать со строкой добавьте запятую:

>>> tuple(('банан'))
('б', 'а', 'н', 'а', 'н')
>>> tuple(('банан', ))
('банан',)

Обращение к элементам так же как и со списками и строками:

>>> fruits[0]
'яблоки'
>>> fruits[0:2]
('яблоки', 'бананы')

Но попытка изменить или удалить элемент приведут к возникновению ошибок:

>>> fruits[2] = "груши"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> del fruits[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

Провека на вхождение тоже работает как и с другими множествми:

>>> "яблоки" in fruits
True
>>> "картофель" in fruits
False

Методы кортежа

У кортежа всего два метода уже знакомых по работе со списками, потому что все остальные методы списка так или иначе подразумевали изменения.

Метод Описание
count(e) Вернуть количество вхождений e в список
index(e) Вернуть позицию первого найденного элемента e

Для чего нужны кортежи

Может показаться странным зачем нужны списки еще одного типа, тем более неизменяемые. Основная причина, конечно их неизменность. Потому, что неизменность бывает нужна в программах, вы можете обезопасить себя от ситуации когда из-за ошибки в коде вы изменили список который нельзя было менять.

Есть еще дополнительные преимущества:

  • Кортежи занимают в памяти немного меньше места.
  • Создание кортежей немного быстрее чем для списков, потому что все данные сразу помещаются в один блок памяти.
  • И как следствие предыдущих пунктов, работа с кортежами происходит незначительно быстрее.
  • Кортеж может быть использован в качестве ключа в словаре.

Если же вам очень критичны скорость и объемы памяти для хранения больших списков, то лучше использовать дополнительные библиотеки типа numpy. Разница в скорости будет в десятки раз.

Ссылки