В Python управление памятью осуществляется автоматически. Это означает, что программисту не нужно беспокоиться о выделении и освобождении памяти. Интерпретатор Python позаботится об этом за вас.

Существует два основных способа управления памятью в Python:

  • Подсчет ссылок
  • Вывоз мусора

Подсчет ссылок

Подсчет ссылок — это простой способ управления памятью. Каждый объект в Python имеет счетчик ссылок. Счетчик ссылок увеличивается всякий раз, когда создается новая ссылка на объект. Счетчик ссылок уменьшается всякий раз, когда ссылка на объект удаляется. Когда счетчик ссылок достигает нуля, объект удаляется.

Например, следующий код создает новый объект, а затем создает две ссылки на него:

>>> a = object()
>>> b = a
>>> c = a

Счетчик ссылок для объекта теперь равен 3.

Когда переменная b удаляется, счетчик ссылок уменьшается до 2.

>>> del b

Когда переменная c удаляется, счетчик ссылок уменьшается до 1.

>>> del c

Когда счетчик ссылок достигает нуля, объект удаляется.

>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

Сборка мусора

Сборка мусора — более сложный способ управления памятью. Сборщик мусора периодически сканирует память на наличие объектов, на которые больше нет ссылок. Когда сборщик мусора находит объект, на который больше нет ссылок, он удаляет этот объект.

Сборщик мусора не всегда нужен. В большинстве случаев подсчета ссылок достаточно для управления памятью. Однако сборщик мусора может быть полезен в тех случаях, когда существует большое количество объектов, на которые больше нет ссылок.

>>> import gc
>>> a = object()
>>> b = a
>>> c = a
>>> gc.collect()
0
>>> del b
>>> del c
>>> gc.collect()
1

В отличие от подсчета ссылок, когда объект a удаляется при удалении переменных b и c. При сборке мусора объект a не удаляется до тех пор, пока не будет запущен сборщик мусора.

Заключение

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