Warum werden Python-Strings auf dem Stapel zugewiesen?

9

Gemäß diesem Python-Code-Visualizer werden Python-Zeichenfolgen auf dem Stapel und nicht auf dem Heap zugewiesen.

Warum ist das? Ich dachte, sie ähneln Java, wo Strings auf dem Heap zugewiesen werden.

rdasxy
quelle

Antworten:

7

Dieser Visualizer zeigt die Zeichenfolgendaten auf dem Stapel nicht an. Es zeigt die lokalen Verweise auf die Heap-Daten als Teil des Aufrufstapels. Dies ist Java sehr ähnlich, wo StringReferenzen lokale Variablen sind, die auf tatsächliche StringObjekte auf dem Heap verweisen .

Dem Visualizer steht es frei, jede Art von Vereinfachung der Darstellung vorzunehmen. Dies bedeutet nicht, dass in einer bestimmten Implementierung von Python "Python-Zeichenfolgen auf dem Stapel zugewiesen sind".

Greg Hewgill
quelle
1

Hat Greg in seiner Antwort gesagt, werden Zeichenfolgen auf dem Haufen zugewiesen.

Der Visualizer hat sich dafür entschieden, einige Objekte im "Frame" -Teil anzuzeigen, was mir falsch erscheint. Glücklicherweise hat dies für jemanden, der Python lernt, nur geringe Auswirkungen, da betroffene Objekte (int, string) unveränderlich sind. Überlegungen zu Effekten sind also weiterhin möglich.

Es entsteht jedoch der falsche Eindruck, dass Zeichenfolgen im Speicher dupliziert werden, wenn Sie Dinge tun wie:

x = "hello"
y = x
Simon Bergot
quelle