Основы программирования в Python

Алла Тамбовцева, НИУ ВШЭ

Кортежи (tuples)

Кортежи встречаются не только в программировании, но и в математике. В математике под кортежем обычно понимают упорядоченное множество. Про множества мы немного говорили на прошлой лекции, множество ‒ это просто набор каких-то элементов, причем элементы множества не должны повторятся. Порядок элементов в множестве не важен: {1, 2, 3} и {3, 2, 1} – это одно и то же множество. В кортеже мы точно знаем, какой элемент является первым, какой ‒ вторым, и так далее.

Внешне кортежи несильно отличаются от списков. Единственное внешнее отличие ‒ элементы кортежа заключаются в круглые, а не в квадратные скобочки.

In [1]:
my_tuple = (1, 2, 4, 6, 9)

К элементам кортежа можно обращаться точно так же, как к элементам списка:

In [2]:
my_tuple[0]
Out[2]:
1

Но, несмотря на кажущееся сходство, кортежи и списки – принципиально разные объекты. Главное отличие кортежей от списков заключается в том, что кортежи – неизменяемые структуры данных. Другими словами, изменять элементы кортежа нельзя. Проверим:

In [3]:
my_tuple[2] = 65
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-a0083389ad43> in <module>()
----> 1 my_tuple[2] = 65

TypeError: 'tuple' object does not support item assignment

Иногда это свойство бывает полезным (некоторая «защита» от изменений), иногда – не очень, но для нас пока важно познакомиться с разными объектами в Python, чтобы потом не удивляться. Ведь многие более продвинутые функции могут возвращать результат или, наоборот, принимать на вход только кортежи или только списки.

При желании кортеж можно превратить в список:

In [4]:
list(my_tuple)
Out[4]:
[1, 2, 4, 6, 9]

И наоборот:

In [5]:
tuple([1,2,3])
Out[5]:
(1, 2, 3)