Comment les variables et la mémoire sont-elles gérées en Python? At-il une pile et un tas et quel algorithme est utilisé pour gérer la mémoire? Compte tenu de ces connaissances, existe-t-il des recommandations sur la gestion de la mémoire pour le traitement de grands nombres / données?
python
memory
memory-management
Matt Alcock
la source
la source
Réponses:
Automagiquement! Non, vraiment, vous créez juste un objet et la machine virtuelle Python gère la mémoire nécessaire et où elle doit être placée dans la disposition de la mémoire.
Quand nous en parlons,
CPython
il utilise un tas privé pour stocker des objets. À partir de la documentation de l'API CPython C :La récupération de la mémoire est principalement gérée par le comptage de références . Autrement dit, la machine virtuelle Python tient un journal interne du nombre de références faisant référence à un objet et le ramasse automatiquement lorsqu'il n'y a plus de références qui s'y réfèrent. De plus, il existe un mécanisme pour casser les références circulaires (que le comptage de références ne peut pas gérer) en détectant des "îlots" d'objets inaccessibles, un peu à l'inverse des algorithmes GC traditionnels qui tentent de trouver tous les objets accessibles.
REMARQUE: veuillez garder à l'esprit que ces informations sont
CPython
spécifiques. D' autres implémentations de python, commepypy
,iron python
,jython
etautres peuvent différer les unsautres et de CPython en ce qui concerne leurs spécificités de miseœuvre. Pour mieux comprendre cela, il peut être utile de comprendre qu'il existe une différence entre Python, la sémantique (le langage) et l'implémentation sous-jacenteMaintenant, je ne peux pas en parler, mais je suis sûr que NumPy (la bibliothèque python la plus populaire pour le calcul des nombres) dispose de mécanismes qui gèrent la consommation de mémoire avec élégance.
Si vous souhaitez en savoir plus sur les composants internes de Python, consultez ces ressources:
la source
Python n'a rien de tel.
Python est le langage et ne spécifie pas exactement comment les implémentations doivent atteindre la sémantique définie par Python le langage.
Chaque implémentation (CPython, PyPy, IronPython, Stackless , Jython ...) est libre de faire ses propres choses!
En C Python, tous les objets vivent sur le tas:
La machine virtuelle CPython est basée sur la pile:
Gardez à l'esprit que cela est spécifique à CPython. La pile ne contient cependant pas les valeurs réelles , elle conserve les références à ces objets.
1 : Source
la source