Изменяемые и неизменяемые типы данных

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

Признак
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?