Sobes.tech
Назад к вопросам
Junior — Middle
41

Какие последствия возникают при попытке изменить объект, предоставленный как неизменяемый?

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Неизменяемый объект нельзя изменить “на месте”: попытка обновить его состояние либо завершится ошибкой, либо приведёт не к изменению исходного объекта, а к созданию нового. В Python это важно для строк, кортежей и frozenset. Обычно проверяют, понимает ли кандидат разницу между изменением объекта и перепривязкой переменной.

Определение:

Неизменяемый объект — это объект, внутреннее состояние которого после создания не может быть изменено. Если код пытается модифицировать такой объект, Python либо выбрасывает исключение, либо требуется создать новый объект на основе старого. Переменная при этом может начать ссылаться на новый объект, но сам исходный объект остаётся прежним.

Пример использования:

Например, строку нельзя изменить по символу:

text = "hello"
text[0] = "H"  # TypeError

Правильный способ — создать новую строку:

text = "hello"
text = "H" + text[1:]
print(text)  # Hello

Пояснение кода:

В первом примере попытка присвоить значение в позицию строки вызывает TypeError, потому что строки в Python неизменяемы.
Во втором примере создаётся новая строка "H" + text[1:], а переменная text начинает ссылаться уже на неё.
То есть изменяется не исходный объект, а ссылка на новый объект.

Ключевые моменты:

  • Неизменяемый объект нельзя изменить по месту.
  • Попытка “внутренней” модификации обычно приводит к TypeError.
  • Для изменения данных создают новый объект.
  • Переменная может быть переназначена на новый объект, но это не изменение старого.
  • В Python к неизменяемым типам относятся строки, кортежи и frozenset.