Освой Python играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Кроме изменяемых списков есть особый вид неизменяемых списков - tuple (кортежи). Кортежи обеспечивают определённую защиту от дурака - намеренных или случайных изменений, а также занимают меньше места в памяти.
Если у обычных списков используются квадратные скобки, то у кортежей круглые (они не обязательны). Сравним, сколько занимают места списки и кортежи.
tuple = (1, 2, 3, 4, 5)
list = [1, 2, 3, 4, 5]
print(tuple.__sizeof__()) # 64
print(list.__sizeof__()) # 80
Пустой кортеж можно создать через пустые круглые скобки.
emptyTuple = ()
print(str(type(emptyTuple))) # <class 'tuple'>
Кортеж из одного элемента. Желательно поставить запятую в конце, иначе получим строку вместо кортежа.
oneTuple = ('t', )
Узнать длину кортежа можно через len().
myTuple = (1, 2, 3, 4, 5)
print(len(myTuple)) # 5
Доступ к отдельному элементу осуществляется по индексу.
myTuple = (1, 2, 3, 4, 5)
print(str(myTuple))
print(myTuple[2]) # 3
Кортежи можно использовать в словарях в качестве ключей.
myDict = {(1, 1): "Bars"}
print(myDict.get((1, 1)))
Можно проводить любые операции, которые не меняют список - методы index(), count().
Можно в один кортеж добавить другой. При этом кортеж внутри кортежа не теряет своей индивидуальности.
Допустим у нас есть старый кошкин дом. Он стал тесным и мы переселили котов в новый дом с другими жильцами.
old_cat_house = ("Барсик", "Мурзик", "Васька")
new_cat_house = ("Рыжик", "Пушок", old_cat_house)
# длина нового дома - два жильца и плюс один кортеж (хотя в нём три кота)
print(len(new_cat_house)) # 3
# выводим всех котов нового дома
print(new_cat_house) #('Рыжик', 'Пушок', ('Барсик', 'Мурзик', 'Васька'))
# выводим третий элемент кортежа, который сам является кортежем
print(new_cat_house[2]) # ('Барсик', 'Мурзик', 'Васька')
# узнать общую длину нового кортежа с элементами второго кортежа
print(len(new_cat_house) - 1 + len(new_cat_house[2]))