все 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Сообщить о неточности