======tuple (кортеж)====== Кортеж - неизменяемая последовательность с упорядоченными элементами. ==Элементами кортежей могут выступать любые объекты.== ====Объявление==== В коде кортежи могут быть объявлены при помощи скобок — () — внутри скобок через запятую перечисляются элементы в нужной последовательности. Если кортеж состоит из одного элемента при объявлении требуется поставить запятую после этого элемента. Имеёте в ввиду того, что запятую в таких случаях относительно легко пропустить при чтении. my_empty_tuple = () my_tuple = 1, 'some', 3.5 # то же, что и (1, 'some', 3.5) my_tuple = 'a', # то же, что и ('a',) Кроме того, можно объявить их при помощи конструктора tuple(), в качестве аргумента которому можно передать последовательность или объект, поддерживающий итерирование (включая генераторы). Если аргументом указан кортеж, то он и будет возвращён без изменений. tuple() # () tuple('abc') # ('a', 'b', 'c') tuple([1, 2, 3]) # (1, 2, 3) # Если передать в конструктор строку то он разобьет ее на отдельные символы t1 = tuple('hello') print(t1) #('h', 'e', 'l', 'l', 'o') ====Сравнение==== Два картежа сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы: a = (3, 2, 1) b = (1, 2, 3) d = (3, 2, 2) e = (3, 2) f = (3, 2, 'a') a > b # True a > d # False d > b # True a > e # True # Python 3 a > f # TypeError : '>' not supported between instances of 'int' and 'str' # Python 2 a > f # False ====Детали реализации CPython==== Пустой кортеж — это глобально уникальный объект. Таким образом, все пустые кортежи — это один и тот же объект, а значит и адрес в памяти у таких кортежей один. a = () b = () a is b # True id(a) == id(b) # True При удалении кортежа (например, с помощью del, или сборщика мусора) небольшой длины (не более 19 элементов), он не удалется сразу, а перемещается в очередь удаления. Эта очередь имеет 20 групп, в каждую из которых помещаются удалённые кортежи соответствующей длины, причём в первой группе хранится пустой кортеж. ====Преимущества перед списком==== Кортеж занимает меньше памяти, одно из его преимуществ l1 = [1, 2, 3] t1 = (1, 2, 3) print(l1.__sizeof__()) # 32 print(t1.__sizeof__()) # 24