Como as variáveis e a memória são gerenciadas no Python.
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.
Ele tem uma pilha e um heap e qual algoritmo é usado para gerenciar a memória?
Quando estamos falando sobre CPython
ele usa um heap privado para armazenar objetos. Da documentação da API CPython C :
O gerenciamento de memória em Python envolve um heap privado contendo todos os objetos e estruturas de dados Python. O gerenciamento deste heap privado é assegurado internamente pelo gerenciador de memória Python. O gerenciador de memória Python possui diferentes componentes que lidam com vários aspectos de gerenciamento de armazenamento dinâmico, como compartilhamento, segmentação, pré-alocação ou cache.
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ãoCPython
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 subjacente
Dado esse conhecimento, há alguma recomendação sobre gerenciamento de memória para grande número / processamento de dados?
Agora, 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: