← Все вопросы

Чем отличается изменяемый (mutable) тип данных от неизменяемого (immutable)?

Задан 2 месяца назад21 просмотров1 ответ
1

Приведите примеры изменяемых и неизменяемых типов в Python. Что произойдет, если попытаться изменить элемент строки или кортежа? А если попытаться изменить элемент списка?

1 ответ

2

Изменяемый объект можно править «внутри», не создавая новый; неизменяемый — нельзя, любая «правка» порождает новый объект.

Изменяемые: списки, словари, множества. Неизменяемые: числа, строки, кортежи, bool, None, frozenset.

Что происходит при попытке изменить:

lst = [1, 2, 3]
lst[0] = 99        # можно, список изменился на месте

s = 'кот'
s[0] = 'К'         # TypeError: 'str' object does not support item assignment

t = (1, 2, 3)
t[0] = 99          # TypeError: 'tuple' object does not support item assignment

Хитрый случай — кортеж со списком внутри: t = ([1, 2], 3). Сам кортеж неизменяем — заменить t[0] на другой объект нельзя, — но лежащий в нём список править можно: t[0].append(9) сработает. Неизменяемость не проникает вглубь.

Почему это важно: изменяемые объекты передаются в функции по ссылке, и функция может незаметно испортить ваш список. И ключами словаря могут быть только неизменяемые значения (строго говоря — хешируемые).

Ваш ответ

, чтобы ответить на вопрос.