Wie werden Variablen und Speicher in Python verwaltet? Hat es einen Stapel und einen Heap und welcher Algorithmus wird zum Verwalten des Speichers verwendet? Gibt es angesichts dieses Wissens Empfehlungen zur Speicherverwaltung für die Verarbeitung großer Zahlen / Daten?
python
memory
memory-management
Matt Alcock
quelle
quelle
Antworten:
Automatisch! Nein, wirklich, Sie erstellen einfach ein Objekt und die Python Virtual Machine verwaltet den benötigten Speicher und wo er im Speicherlayout platziert werden soll.
Wenn wir darüber sprechen
CPython
, wird ein privater Heap zum Speichern von Objekten verwendet. Aus der CPython C-API-Dokumentation :Die Speicherrückgewinnung erfolgt meist durch Referenzzählung . Das heißt, die Python-VM führt ein internes Journal darüber, wie viele Referenzen auf ein Objekt verweisen, und sammelt es automatisch durch Müll, wenn keine Referenzen mehr darauf verweisen. Darüber hinaus gibt es einen Mechanismus zum Aufbrechen von Zirkelreferenzen (mit denen die Referenzzählung nicht umgehen kann), indem nicht erreichbare "Inseln" von Objekten erkannt werden, etwas im Gegensatz zu herkömmlichen GC-Algorithmen , die versuchen, alle erreichbaren Objekte zu finden.
HINWEIS: Bitte beachten Sie, dass diese Informationen
CPython
spezifisch sind. Andere PythonImplementierungen, wiepypy
,iron python
,jython
und andere können voneinander und von CPython unterscheidenwenn es um deren Umsetzung Besonderheiten kommt. Um dies besser zu verstehen, kann es hilfreich sein zu verstehen, dass es einen Unterschied zwischen Python, der Semantik (der Sprache) und der zugrunde liegenden Implementierung gibtJetzt kann ich nicht darüber sprechen, aber ich bin mir sicher, dass NumPy (die beliebteste Python-Bibliothek für das Knacken von Zahlen) über Mechanismen verfügt, die den Speicherverbrauch angemessen handhaben.
Wenn Sie mehr über Pythons Interna erfahren möchten, sehen Sie sich diese Ressourcen an:
quelle
Python hat keine solche Sache.
Python ist die Sprache und gibt nicht an, wie genau die Implementierungen sind die von Python, der Sprache, definierte Semantik erreichen müssen.
Jede Implementierung (CPython, PyPy, IronPython, Stackless , Jython ...) kann ihre eigene Sache machen!
In C Python befinden sich alle Objekte auf dem Heap:
Die virtuelle CPython-Maschine ist stapelbasiert:
Beachten Sie, dass dies CPython-spezifisch ist. Der Stapel enthält jedoch nicht die tatsächlichen Werte, sondern enthält Verweise auf diese Objekte.
1 : Quelle
quelle