Dlaczego ciągi Python są przydzielane na stosie?

9

Zgodnie z tym wizualizatorem kodu w języku Python ciągi znaków w języku Python są przydzielane na stosie, a nie na stosie.

Dlaczego to? Myślałem, że będą podobne do Javy, gdzie ciągi są przydzielane na stercie.

rdasxy
źródło

Odpowiedzi:

7

Ten wizualizator nie pokazuje danych ciągu na stosie. Pokazuje lokalne odwołania do danych sterty jako część stosu wywołań. Jest to bardzo podobne do Javy, gdzie Stringodwołania są lokalnymi zmiennymi wskazującymi rzeczywiste Stringobiekty na stercie.

Wizualizator może dowolnie upraszczać reprezentację, na której zależy. Nie oznacza to, że „ciągi Pythona są przydzielane na stosie” w dowolnej implementacji Pythona.

Greg Hewgill
źródło
1

Greg powiedział w swojej odpowiedzi, że łańcuchy są przydzielane na stercie.

Wizualizator wybrał wyświetlanie niektórych obiektów w części „kadrowej”, co wydaje mi się niewłaściwe. Na szczęście nie ma to większego wpływu na osobę uczącą się języka Python, ponieważ obiekty, których dotyczy problem (int, string), są niezmienne. Dlatego rozumowanie efektów jest nadal możliwe.

Jednak daje fałszywe wrażenie, że ciągi są duplikowane w pamięci podczas wykonywania takich czynności, jak:

x = "hello"
y = x
Simon Bergot
źródło