Найти в Дзене
11 подписчиков

Управление памятью в Python [Часть 1.1]



Сегодня начинаем серию статей про управление памятью в Python. В первой части разберём основы: как Python управляет памятью, как работает сборщик мусора, и посмотрим на простых примерах, как это всё работает на практике.

## Как Python управляет памятью

Прежде чем погружаться в детали, важно понять базовую модель памяти в Python. В отличие от языков вроде C/C++, Python автоматически управляет памятью за нас. Но это не значит, что нам не нужно понимать, как это работает.

### Базовая модель памяти

В Python всё является объектами. Когда мы создаём переменную, происходит следующее:

x = dict()

1. Python выделяет память для объекта (в данном случае словаря)
2. Создаёт объект
3. Создаёт имя 'x' в текущей области видимости
4. Связывает имя с объектом (создаёт ссылку)

Важно понимать: переменные в Python - это не контейнеры для значений, а именно ссылки на объекты в памяти. Давайте посмотрим на это подробнее:

x = [1, 2, 3]
y = x

В этом случае мы не копируем список, а создаём новую ссылку на тот же самый объект. Функция id() в Python возвращает уникальный идентификатор объекта в памяти (фактически, его адрес в памяти). Это позволяет нам проверить, ссылаются ли разные переменные на один и тот же объект:

x = [1, 2, 3]
y = x

print(id(x)) # например, 140712834927872
print(id(y)) # то же самое число - это тот же объект

# Если мы изменим список через одну ссылку, изменения видны через другую
x.append(4)
print(y) # [1, 2, 3, 4]

# А вот если создать новый список - это будет другой объект
z = [1, 2, 3]
print(id(z)) # другой номер - это новый объект в памяти

Это важно понимать, особенно когда мы работаем с изменяемыми объектами (списками, словарями, множествами). Неправильное управление ссылками может привести к неожиданному поведению программы.

В следующей части поговорим о том, как Python оптимизирует использование памяти

1 минута