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.
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.
Antworten:
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 String
Referenzen lokale Variablen sind, die auf tatsächliche String
Objekte 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".
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