19. Определить разницу между изменяемыми и неизменяемыми объектами
Условие задачи Даны список и кортеж. Нужно определить, что произойдет при попытке изменить элемент списка и элемент кортежа по индексу.
a = [1, 2, 3, 4, 5]
a[2] = 100
print(f"{a = }")
b = (1, 2, 3, 4, 5)
b[3] = 100
print(f"{b = }")
Спойлеры к решению
Подсказки
- Список
listявляется изменяемым типом данных. - Поэтому элемент списка можно изменить по индексу.
- Кортеж
tupleявляется неизменяемым типом данных. - Поэтому попытка изменить элемент кортежа по индексу приведёт к ошибке.
- После ошибки выполнение программы остановится, если ошибка не обработана через
try/except.
Решение
a = [1, 2, 3, 4, 5]
a[2] = 100
print(f"{a = }")
b = (1, 2, 3, 4, 5)
b[3] = 100
print(f"{b = }")
Сначала список изменится успешно:
a[2] = 100
Индекс 2 — это третий элемент списка. Поэтому список станет таким:
a = [1, 2, 100, 4, 5]
После этого выполняется попытка изменить кортеж:
b[3] = 100
Но кортежи в Python неизменяемые, поэтому будет ошибка:
TypeError: 'tuple' object does not support item assignment
Итоговый вывод будет таким:
a = [1, 2, 100, 4, 5]
TypeError: 'tuple' object does not support item assignment
Строка:
print(f"{b = }")
не выполнится, потому что программа остановится на ошибке при попытке изменить элемент кортежа.