Python Glossary English

все Python 3Кортежи (tuple)понятие

Неизменяемость кортежа

неизменяемость

Кортежи неизменяемы: нельзя изменить, добавить или удалить элемент. Обходы: создать новый кортеж, преобразовать в список.

Синтаксис

t[i] = val  # TypeError

Неизменяемость тут поверхностная: кортеж запрещает подменять свои ссылки, но если внутри лежит список, менять его никто не мешает — t[0].append(4) отработает штатно. Отсюда и хешируемость: положить кортеж в множество или в ключ словаря можно, только когда хешируемы все его элементы. Классическая ловушка — t[0] += [4] для списка внутри кортежа: список реально расширится, и лишь потом прилетит TypeError на попытке присваивания.

Примеры

t = (1, 2, 3)
try:
    t[0] = 99
except TypeError as e:
    print(e)  # → 'tuple' object does not support item assignment
try:
    del t[0]
except TypeError as e:
    print(e)  # → 'tuple' object doesn't support item deletion
t = (1, 2, 3)
t2 = t + (4,)
print(t2)  # → (1, 2, 3, 4) — новый кортеж, t не изменился
lst = list(t)
lst[0] = 99
t = tuple(lst)
print(t)  # → (99, 2, 3) — через список
nested = ([1, 2], [3, 4])
nested[0].append(5)
print(nested)  # → ([1, 2, 5], [3, 4]) — вложенный список изменяем!

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности