Selon ce visualiseur de code Python, les chaînes Python sont allouées sur la pile et non sur le tas.
Pourquoi est-ce? Je pensais qu'ils seraient similaires à Java où les chaînes sont allouées sur le tas.
Selon ce visualiseur de code Python, les chaînes Python sont allouées sur la pile et non sur le tas.
Pourquoi est-ce? Je pensais qu'ils seraient similaires à Java où les chaînes sont allouées sur le tas.
Réponses:
Ce visualiseur n'affiche pas les données de chaîne sur la pile. Il montre les références locales aux données du tas dans le cadre de la pile d'appels. Ceci est très similaire à Java où les String
références sont des variables locales qui pointent vers des String
objets réels sur le tas.
Le visualiseur est libre de faire tout type de simplification de représentation qui lui convient. Cela n'implique pas que "les chaînes Python sont allouées sur la pile" dans une implémentation donnée de Python.
A déclaré Greg dans sa réponse, les chaînes sont allouées sur le tas.
Le visualiseur a choisi d'afficher certains objets dans la partie "frame", ce qui me semble faux. Heureusement, cela a peu d'impact pour quelqu'un qui apprend le python, car les objets affectés (int, chaîne) sont immuables. Il est donc toujours possible de raisonner sur les effets.
Cependant, cela donne la fausse impression que les chaînes sont dupliquées en mémoire lorsque vous faites des choses comme:
x = "hello"
y = x