Найти в Дзене

Изменяемые и неизменяемые объекты. Кортежи

Оглавление

Мы уже познакомились с таким видом коллекций, как списки, сегодня же мы разберем кортежи. Начнем!

Что такое кортежи?

Кортеж так же, как и список, является коллекцией, но в отличие от него он неизменяем. К неизменяемым объектам помимо кортежей относятся числа и строки.

Если мы создадим переменную и зададим ей несколько значений, а затем выведем ее на экран, то увидим эти значения в круглых скобках (Рис.1). Это и есть кортеж (tuple).

(Рис.1)

Мы можем прописывать значения как и сразу в скобках, так и без них (Рис.2). Можем также прописать команду tuple, результат будет тот же.

-2

(Рис.2)

Если мы выведем тип нашей переменной, то увидим, что она относится к типу tuple, то есть кортеж (Рис.3).

-3

(Рис.3)

Списки и кортежи. Сходства и различия.

Как и говорилось раннее, кортеж относится к неизменяемым типам данных, тем не менее внутри он может содержать изменяемые типы. Если обобщить, то кортеж – это неизменяемая упорядоченная коллекция, которая может содержать в себе разные типы данных.

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

Например, заменим пару элементов в нашем первом кортеже и выведем (Рис.4).

-4

(Рис.4)

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

То есть, если мы возьмем индекс [0] у нашего кортежа, то нам выдаст элемент «1» (Рис.5), здесь для нас ничего нового.

-5

(Рис.5)

Однако, если мы захоти изменить этот элемент, например на число 200 попросим вывести кортеж на экран, то столкнемся с ошибкой (Рис.6).

-6

(Рис.6)

Ошибка буквально сообщает нам, что кортеж не поддерживает обращение по элементам.

Зачем нужны кортежи?

Для чего же нужен кортеж, если его нельзя редактировать или как-либо изменять? Вообще, сам по себе кортеж весьма полезная вещь, хоть и встречается реже списка.

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

Еще одна его особенность состоит в том, что он элементарно занимает в памяти меньше места, чем список. Например, создадим равноценный нашему кортежу список и проверим, сколько занимает каждый из них в памяти с помощью команды __sizeof__ (Рис.7). Как мы видим, кортеж действительно занимает меньше места чем список, потому его можно также использовать с целью экономии памяти.

-7

(Рис.7)

Операции с кортежами

Мы уже упоминали, что несмотря на неизменяемость самого кортежа, в себе он может хранить какие-то изменяемые объекты. Для примера создадим кортеж, внутри которого будет список и выведем его (Рис.8).

-8

(Рис.8)

Теперь попробуем изменить элементы этого внутреннего списка. Для этого обратимся по порядковому номеру, то есть по индексу [0] к первому элементу кортежа - списку, а затем по второму индексу [0] обратимся к первому элементу уже самого списка. Попробуем присудить ему новое значение – число 2 (Рис.9). Не забываем про команду print и видим, что теперь в списке внутри кортежа первый элемент не «1», а «2».

-9

(Рис.9)

Помимо этого, кортежи поддерживают два вида операций – конкатенацию и умножение.

Конкатенация, как мы помним, у нас фигурировала в работе со строками, она обозначала сложение двух строк. Здесь мы можем сделать то же самое. К примеру, мы можем прибавить к нашему кортежу другой кортеж и элементы из второго кортежа прибавятся к нашему в конце (Рис.10).

-10

(Рис.10)

Еще мы можем встретить умножение. Допустим у нас есть кортеж из элементов «1» и «2», и мы умножим его на 3 (Рис.11). Как мы видим, элементы внутри кортежа теперь продублированы 3 раза.

-11

(Рис.11)

Это единственные операции, поддерживаемые кортежами. Но мы все еще не можем добавить какой-то отдельно взятый элемент или изменить какой-то элемент внутри кортежа.

По скольку я являюсь фрилансером, берусь за выполнение небольших проектов, и оказываю помощь в решении домашних заданий связанных с написанием кода на данном языке. Все подробности в моём Telegram канале : https://t.me/pythonrazrabotchik , подписывайтесь, там будет очень много интересного.