
Кортежи в Python
Кортежи в Python
Кортежи в Python - это неизменяемые, упорядоченные объекты которые очень похожи на списки, с поправкой на то, что вы не можете добавлять, удалять или изменять их значения.
Кортеж имеет следующий синтаксис:
my_tuple = (1, 2, 3, 'python', 3, 2, 1)
Создать кортеж можно несколькими способами:
- my_tuple = (1, 2, 3 )
- my_tuple = tuple((1, 2, 3))
Кортеж можно создать и просто написав my_tuple = 1, .Но принято всё же использовать круглые скобки.
Будьте внимательны, когда создаёте кортеж с 1 элементом. Не забывайте поставить запятую после элемента, это правило создания кортежа в Python:
my_tuple = (1)
type(my_tuple)
<class 'int'>
my_tuple = (1,)
type(my_tuple)
<class 'tuple'>
В первом случае не поставив запятую, мы получили обычное целое число, во втором же - полноценный кортеж.
Когда используются кортежи в Python
Основная причина использования кортежа вместо списка, конечно безопасность хранения данных, защита от их изменения. Если хотите - защита от дурака. Например нам нужно забрать из БД данные для формирования статистики, мы точно знаем, что менять их не собираемся, здесь как раз уместно завернуть данные в кортеж для защиты от случайного изменения.
Вторая причина по которой часто используют кортежи - это меньший размер по сравнению со списками. Если вы создаёте блог, то это скорей всего не будет ощутимо, но как только вы захотите влиться в мир Big Data и Data Science, то увидите насколько часто там используются кортежи.
Держите пример:
my_list = ['python', 'is', 'awesome']
my_tuple = ('python', 'is', 'awesome')
my_list.__sizeof__()
64
my_tuple.__sizeof__()
48
Методы для работы с кортежами в Python
К кортежам применимы все методы списков, за исключением тех, которые изменяют объект.
Обратится к элементу кортежа можно по индексу, так же как и при работе со списками:
my_tuple = ('python', 'is', 'awesome')
my_tuple[1]
'is'
my_tuple[0]
'python'
my_tuple[1]
'is'
my_tuple[2]
'awesome'
Следовательно, можно получить и срез:
my_tuple = ('python', 'is', 'awesome')
my_tuple[0:2]
('python', 'is')
Но не забывайте, что добавить, удалить или изменить элемент в кортеже вы не можете:
my_tuple = ('python', 'is', 'awesome')
my_tuple[0] = 'php'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Вместо этого, мы можем преобразовать кортеж в список, добавить, или удалить элемент в нём и обратно преобразовать в кортеж. Помните что кортежи не изменяемый объект? Соответственно кортеж до преобразования в список и после, это два разных объекта, что и показывают нам их id.
my_tuple = ('python', 'is', 'awesome')
id(my_tuple) = 139921634998384
my_list = list(my_tuple)
my_tuple = ['python', 'is', 'awesome']
my_list.append(' and so useful')
my_list = ['python', 'is', 'awesome', ' and so useful']
my_tuple = tuple(my_list)
my_tuple = ('python', 'is', 'awesome', ' and so useful')
id(my_tuple) = 139921634959176
Деструктуризация кортежей.
Кортеж можно деструктурировать, другими словами - разобрать. Например:
my_tuple = ('bmw', 3.8, 'Anna')
car, fl_num, name = my_tuple
car = 'bmw'
fl_num = 3.8
name = 'Anna'