Изменяемые и неизменяемые типы данных
1. Изменяемые типы данных (mutable)
Их содержимое можно изменять после создания.
Примеры:
list
,dict
,set
, пользовательские объекты (классы).
Особенности:
Можно добавлять, удалять, изменять элементы.
При копировании важно различать поверхностную и глубокую копию.
Хешироваться не могут, поэтому не могут быть ключами словарей.
Примеры:
lst = [1, 2, 3]
lst[0] = 10 # изменяем элемент
lst.append(4) # добавляем элемент
lst.remove(2) # удаляем элемент
print(lst) # [10, 3, 4]
d = {"a": 1, "b": 2}
d["a"] = 10 # изменяем значение
2. Неизменяемые типы данных (immutable)
Их содержимое нельзя изменить после создания.
Примеры:
int
,float
,bool
,str
,tuple
,frozenset
,bytes
.
Особенности:
Любая операция, которая "меняет" объект, на самом деле создаёт новый объект.
Можно использовать в качестве ключей словарей и элементов множеств.
Примеры:
s = "hello"
s2 = s.upper() # создаёт новый объект
print(s) # "hello"
print(s2) # "HELLO"
t = (1, 2, 3)
# t[0] = 10 # TypeError
3. Как отличать mutable и immutable
Изменяемость
Да
Нет
Копирование
Поверхностное vs глубокое
Не требуется, объект не меняется
Хешируемость
Нет
Да (можно использовать как ключ в dict или элемент set)
Примеры
list, dict, set, bytearray
int, float, bool, str, tuple, frozenset, bytes
4. Применение в автотестах
Mutable удобно для изменения тестовых данных, подготовки сценариев:
test_data = [1,2,3]
test_data.append(4)
assert test_data == [1,2,3,4]
Immutable удобно для фиксации константных данных и ключей словарей:
config_key = ("user_id", "session_id")
settings = {config_key: "value"}
Внимание к копированию:
import copy
a = [[1,2], [3,4]]
b = copy.copy(a) # поверхностная копия
c = copy.deepcopy(a) # глубокая копия
💡 Вывод:
Mutable — изменяемые объекты (list, dict, set), их можно менять на месте.
Immutable — неизменяемые объекты (int, str, tuple), любые операции создают новый объект.
Понимание этих типов важно для правильной работы с данными в автотестах и предотвращения ошибок при копировании и сравнении объектов.
Last updated
Was this helpful?