Как управляются переменные и память в Python.
blockquote>Автоматически! Нет, действительно, вы просто создаете объект, а виртуальная машина Python обрабатывает необходимую память и где она должна быть помещена в макет памяти.
Имеет ли он стек и кучу и какой алгоритм используется для управления памятью?
blockquote>Когда мы говорим о
CPython
, он использует кучу private heap для хранения объектов. Из документации API CPython C :Управление памятью в Python включает в себя кучу, содержащую все объекты и структуры данных Python. Управление этой частной кучей обеспечивается внутренним менеджером памяти Python. Менеджер памяти Python имеет разные компоненты, которые имеют дело с различными аспектами управления динамическими хранилищами, такими как совместное использование, сегментация, предварительное распределение или кеширование.
blockquote>Рекультивация памяти в основном обрабатывается подсчетом ссылок. То есть, Python VM хранит внутренний журнал о том, сколько ссылок ссылается на объект, и автоматически мусор собирает его, когда больше ссылок не ссылается на него. Кроме того, существует механизм разрыва круговых ссылок (который не может обрабатывать подсчет ссылок) путем обнаружения недоступных «островов» объектов, несколько в обратном порядке для традиционных алгоритмов GC которые пытаются найти все доступные объекты.
ПРИМЕЧАНИЕ: Пожалуйста, имейте в виду, что эта информация является
CPython
конкретной. Другие реализации python, такие какpypy
,iron python
,jython
и другие, могут отличаться друг от друга и от CPython, когда дело доходит до их особенностей реализации. Чтобы понять это лучше, это может помочь понять, что между Python существует семантика (язык) и базовая реализация. Учитывая это знание, существуют ли какие-либо рекомендации по управлению памятью для большого количества / data crunching?
blockquote>Теперь я не могу говорить об этом, но я уверен, что NumPy (самая популярная библиотека python для хруста числа) имеет механизмы, которые обрабатывают память
Если вы хотите узнать больше о внутренних языках Python, посмотрите на эти ресурсы:
- Шаг через CPython (видео )
- Презентация о внутренних компонентах виртуальной машины Python
- В истинном хакерском духе исходный код CPython Object Allocator