Содержание

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