De acuerdo con este visualizador de código Python , las cadenas de Python se asignan en la pila y no en el montón.
¿Por qué es esto? Pensé que serían similares a Java donde las cadenas se asignan en el montón.
De acuerdo con este visualizador de código Python , las cadenas de Python se asignan en la pila y no en el montón.
¿Por qué es esto? Pensé que serían similares a Java donde las cadenas se asignan en el montón.
Ese visualizador no muestra los datos de la cadena en la pila. Muestra las referencias locales a los datos del montón como parte de la pila de llamadas. Esto es muy similar a Java, donde las String
referencias son variables locales que apuntan a String
objetos reales en el montón.
El visualizador es libre de hacer cualquier tipo de simplificación de representación que le interese. No implica que "las cadenas de Python se asignen en la pila" en cualquier implementación dada de Python.
Ha dicho Greg en su respuesta, las cadenas se asignan en el montón.
El visualizador ha elegido mostrar algunos objetos en la parte del "marco", lo que me parece incorrecto. Afortunadamente, tiene poco impacto para alguien que está aprendiendo python, ya que los objetos afectados (int, string) son inmutables. Por lo tanto, todavía es posible razonar sobre los efectos.
Sin embargo, da la falsa impresión de que las cadenas se duplican en la memoria cuando haces cosas como:
x = "hello"
y = x