Відповідно до цього візуалізатора коду Python, рядки Python виділяються на стеці, а не на купі.
Чому це? Я думав, що вони будуть схожі на Java, де струни виділяються на купі.
Відповідно до цього візуалізатора коду Python, рядки Python виділяються на стеці, а не на купі.
Чому це? Я думав, що вони будуть схожі на Java, де струни виділяються на купі.
Відповіді:
Цей візуалізатор не відображає рядкові дані на стеку. Він показує локальні посилання на дані купи як частину стеку викликів. Це дуже схоже на Java, де String
посилання є локальними змінними, які вказують на фактичні String
об'єкти в купі.
Візуалізатор вільний робити будь-які спрощення подання зображень, про які він піклується. Це не означає, що "рядки Python виділяються на стеці" в будь-якій реалізації Python.
Як сказав Грег у своїй відповіді, рядки виділяються на купі.
Візуалізатор вирішив відображати деякі об’єкти в частині "кадру", що мені здається неправильним. На щастя, це мало впливає на того, хто вивчає пітон, оскільки уражені об'єкти (int, string) незмінні. Тож міркування про наслідки все ж можливі.
Однак створюється помилкове враження, що рядки дублюються в пам'яті, коли ви робите такі речі:
x = "hello"
y = x