Ответ
Изменяемые (mutable) типы данных в Python позволяют модифицировать содержимое объекта после его создания без создания нового объекта. Это ключевое отличие от неизменяемых (immutable) типов.
Основные встроенные изменяемые типы:
-
Список (list)
my_list = [1, 2, 3] my_list.append(4) # Изменяет исходный список: [1, 2, 3, 4] my_list[0] = 99 # Изменяет элемент по индексу: [99, 2, 3, 4] -
Словарь (dict)
my_dict = {'a': 1, 'b': 2} my_dict['c'] = 3 # Добавляет новую пару ключ-значение my_dict['a'] = 100 # Изменяет значение для ключа 'a' -
Множество (set)
my_set = {1, 2, 3} my_set.add(4) # Добавляет элемент: {1, 2, 3, 4} my_set.discard(2) # Удаляет элемент: {1, 3, 4} -
Байтовый массив (bytearray)
barr = bytearray(b'hello') barr[0] = 106 # Изменяет байт: bytearray(b'jello')
Почему это важно? Практические последствия:
-
Передача по ссылке: При передаче изменяемого объекта в функцию, изменения внутри функции отражаются на исходном объекте.
def modify_list(lst): lst.append('modified') original = [1, 2] modify_list(original) print(original) # Вывод: [1, 2, 'modified'] ! -
Ключи словаря: Только неизменяемые типы (строки, числа, кортежи) могут быть ключами словаря. Список или множество — не могут.
valid_key = (1, 2) # Кортеж (неизменяемый) — можно # invalid_key = [1, 2] # Список (изменяемый) — вызовет TypeError -
Безопасность в многопоточности: Работа с изменяемыми объектами требует синхронизации (например, через
threading.Lock).
Общее правило: Если тип данных позволяет изменить свое содержимое "на месте" (in-place) с помощью методов вроде .append(), .add(), [key] = value или оператора индексации [index] = value, то он изменяемый.