Como as variáveis e a memória são gerenciadas no Python? Ele tem uma pilha e um heap e qual algoritmo é usado para gerenciar a memória? Dado esse conhecimento, há alguma recomendação sobre gerenciamento de memória para grande número / processamento de dados?
python
memory
memory-management
Matt Alcock
fonte
fonte
Respostas:
Automagicamente! Não, realmente, você apenas cria um objeto e a máquina virtual Python trata da memória necessária e onde ela deve ser colocada no layout de memória.
Quando estamos falando sobre
CPython
ele usa um heap privado para armazenar objetos. Da documentação da API CPython C :A recuperação de memória é principalmente tratada por contagem de referência . Ou seja, o Python VM mantém um diário interno de quantas referências se referem a um objeto e o coleta de lixo automaticamente quando não há mais referências a ele. Além disso, existe um mecanismo para quebrar referências circulares (que a contagem de referência não pode controlar) detectando "ilhas" de objetos inacessíveis, um pouco ao contrário dos algoritmos tradicionais de GC que tentam encontrar todos os objetos alcançáveis.
NOTA: Lembre-se de que essas informações são
CPython
específicas. Outras implementações de python, comopypy
,iron python
,jython
e outros podem ser diferentes uns dos outros e de CPython quando se trata de suas especificidades de implementação. Para entender isso melhor, pode ajudar a entender que há uma diferença entre Python, a semântica (a linguagem) e a implementação subjacenteAgora, não posso falar sobre isso, mas tenho certeza de que a NumPy (a biblioteca python mais popular para processamento de números) possui mecanismos que controlam o consumo de memória de maneira adequada.
Se você quiser saber mais sobre o Python's Internals, dê uma olhada nestes recursos:
fonte
Python não têm qualquer coisa.
Python é a linguagem e não especifica como exatamente as implementações devem atingir a semântica definida por Python a linguagem.
Cada implementação (CPython, PyPy, IronPython, Stackless , Jython ...) é livre para fazer suas próprias coisas!
Em C Python, todos os objetos residem no heap:
A máquina virtual CPython é baseada em pilha:
Lembre-se de que isso é específico do CPython. A pilha não contém os valores reais , ela mantém referências a esses objetos.
1 : Fonte
fonte