Являются ли строки (str) в Python изменяемыми (mutable)?

«Являются ли строки (str) в Python изменяемыми (mutable)?» — вопрос из категории Python, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, строки в Python неизменяемы (immutable). Это фундаментальное свойство типа str. После создания строкового объекта его содержимое изменить невозможно. Любая операция, модифицирующая строку, возвращает новый строковый объект.

Примеры, демонстрирующие неизменяемость:

s = "hello"

# Попытка изменить символ по индексу вызовет ошибку
s[0] = "H"  # TypeError: 'str' object does not support item assignment

# Операции, создающие новые строки:
new_s = s.replace("h", "H")  # "Hello" — это новый объект
print(s)        # Оригинал остался "hello"
print(new_s)    # "Hello"

concatenated = "H" + s[1:]  # Конкатенация создаёт новую строку "Hello"
upper_s = s.upper()         # "HELLO" — новый объект

Практическое следствие и обходной путь: Поскольку строки неизменяемы, частые операции конкатенации в цикле (s += "part") создают множество временных объектов и неэффективны. Для сборки строки из многих частей используйте метод .join():

# Неэффективно:
result = ""
for chunk in list_of_strings:
    result += chunk

# Эффективно:
result = "".join(list_of_strings)

Если требуется работать с изменяемой последовательностью символов, можно преобразовать строку в список, изменить его и собрать обратно:

s_list = list("hello")
s_list[0] = "H"  # Изменение списка разрешено
s_new = "".join(s_list)  # "Hello"