Ответ 1
Как управляются переменные и память в Python.
автомагически! Нет, действительно, вы просто создаете объект, а виртуальная машина Python обрабатывает необходимую память и где она должна быть помещена в макет памяти.
Имеет ли он стек и кучу, и какой алгоритм используется для управления память?
Когда мы говорим о CPython
, он использует частную кучу для хранения объектов. Из официальной документации Python:
Управление памятью в Python включает в себя частную кучу, содержащую все Объекты и структуры данных Python. Управление этим частным куча обеспечивается внутренним менеджером памяти Python. Python диспетчер памяти имеет различные компоненты, которые динамические аспекты управления хранением, такие как совместное использование, сегментация, preallocation или кеширование.
Алгоритм, используемый для сбора мусора, называется Подсчет ссылок. Это Python VM хранит внутренний журнал, сколько ссылок ссылается на объект, и автоматически мусор собирает его, когда больше ссылок не ссылается на него.
ПРИМЕЧАНИЕ.. Имейте в виду, что эта информация CPython
. Другие реализации python, такие как pypy
, iron python
, jython
и другие, могут отличаться друг от друга и от CPython, когда дело доходит до их особенностей реализации. Чтобы понять, что лучше, , это может помочь понять, что существует разница между семантикой Python (языком) и базовой реализацией
Учитывая эти знания, существуют ли какие-либо рекомендации по управлению памятью для большого количества/хрустов данных?
Теперь я не могу говорить об этом, но я уверен, что NumPy (самая популярная библиотека python для хруста числа) имеет механизмы которые грамотно обрабатывают потребление памяти.
Если вы хотите узнать больше о Python Internals, посмотрите эти ресурсы:
- Переход через CPython (видео)
- Презентация о внутренних компонентах виртуальной машины Python
- В истинном хакерском духе Исходный код Python Object Allocator