¿Cómo se administran las variables y la memoria en Python? ¿Tiene una pila y un montón y qué algoritmo se usa para administrar la memoria? Teniendo en cuenta este conocimiento, ¿existen recomendaciones sobre la gestión de la memoria para procesar grandes números / datos?
python
memory
memory-management
Matt Alcock
fuente
fuente
Respuestas:
¡Automágicamente! No, en realidad, solo crea un objeto y la máquina virtual Python maneja la memoria necesaria y dónde se colocará en el diseño de la memoria.
Cuando hablamos de
CPython
él, usa un montón privado para almacenar objetos. De la documentación de la API de CPython C :La recuperación de memoria se maneja principalmente mediante el recuento de referencias . Es decir, la VM Python mantiene un diario interno de cuántas referencias se refieren a un objeto, y la basura lo recolecta automáticamente cuando no hay más referencias que se refieren a él. Además, hay un mecanismo para romper referencias circulares (que el recuento de referencias no puede manejar) detectando "islas" inalcanzables de objetos, algo al revés de los algoritmos GC tradicionales que intentan encontrar todos los objetos alcanzables.
NOTA: Tenga en cuenta que esta información es
CPython
específica. Otras implementaciones pitón, tales comopypy
,iron python
,jython
y otros pueden ser diferentes unos de otros y de CPython cuando se trata de sus implementaciones específicas. Para comprenderlo mejor, puede ser útil comprender que existe una diferencia entre Python, la semántica (el lenguaje) y la implementación subyacente.Ahora no puedo hablar de esto, pero estoy seguro de que NumPy (la biblioteca de Python más popular para procesar números) tiene mecanismos que manejan el consumo de memoria con elegancia.
Si desea saber más sobre los aspectos internos de Python, eche un vistazo a estos recursos:
fuente
Python no tiene ninguno tal cosa.
Python es el lenguaje y no especifica cómo exactamente las implementaciones deben lograr la semántica definida por Python el lenguaje.
Cada implementación (CPython, PyPy, IronPython, Stackless , Jython ...) es libre de hacer lo suyo!
En C Python, todos los objetos viven en el montón:
La máquina virtual CPython se basa en pilas:
Tenga en cuenta que esto es específico de CPython. Sin embargo, la pila no contiene los valores reales , mantiene referencias a esos objetos.
1 : fuente
fuente