Олег Марков
Изменяемые и неизменяемые типы данных в Python
Введение
В Python объекты делятся на изменяемые (mutable) и неизменяемые (immutable). Понимание этой классификации критично для правильной работы с переменными, функциями и памятью, а также для предотвращения неожиданных ошибок.
В этой статье мы рассмотрим примеры изменяемых и неизменяемых объектов, объясним их поведение при копировании и передаче в функции.
Если вы хотите глубже изучить особенности типов данных Python и работу с ними на практике — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Изменяемые типы данных (mutable)
Объекты, которые можно менять после создания:
- Списки (
list)
lst = [1, 2, 3]
lst[0] = 10
print(lst) # [10, 2, 3]- Словари (
dict)
d = {"a": 1, "b": 2}
d["a"] = 10
print(d) # {'a': 10, 'b': 2}- Множества (
set)
s = {1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}Изменяемые объекты могут быть изменены «на месте», что влияет на все переменные, ссылающиеся на этот объект.
Неизменяемые типы данных (immutable)
Объекты, которые нельзя изменить после создания:
- Числа (
int,float,complex) - Строки (
str)
s = "hello"
s2 = s.upper()
print(s) # "hello"
print(s2) # "HELLO"- Кортежи (
tuple)
t = (1, 2, 3)
# t[0] = 10 # Ошибка- Замороженные множества (
frozenset)
Изменение невозможно — любые операции возвращают новый объект.
Влияние на функции и копирование
При передаче изменяемого объекта в функцию изменения сохраняются:
def modify_list(lst):
lst.append(4)
numbers = [1, 2, 3]
modify_list(numbers)
print(numbers) # [1, 2, 3, 4]Неизменяемые объекты создают копию при изменении:
def add_one(x):
x += 1
return x
num = 5
new_num = add_one(num)
print(num) # 5
print(new_num) # 6Частые ошибки
- Ожидание, что неизменяемый объект изменится «на месте».
- Использование mutable объектов как ключей словаря (не разрешено).
- Путаница при копировании списков и вложенных объектов (нужны
copyилиdeepcopy).
Часто задаваемые вопросы
Можно ли использовать tuple как ключ словаря? Да, если все элементы tuple неизменяемые.
Почему строки immutable, а списки mutable? Immutable объекты безопаснее для передачи между функциями и многопоточности, обеспечивая неизменность данных.
Как создать копию изменяемого объекта?
import copy
new_obj = copy.deepcopy(old_obj)Заключение
Понимание разницы между изменяемыми и неизменяемыми объектами помогает писать безопасный и предсказуемый код, предотвращать ошибки при работе с функциями, аргументами и коллекциями.
Для системного изучения типов данных, mutable и immutable объектов рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев