Pourquoi les chaînes Python sont-elles allouées sur la pile?

9

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.

rdasxy
la source

Réponses:

7

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 Stringréférences sont des variables locales qui pointent vers des Stringobjets 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.

Greg Hewgill
la source
1

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
Simon Bergot
la source