Согласно этому визуализатору кода Python, строки Python размещаются в стеке, а не в куче.
Почему это? Я думал, что они будут похожи на Java, где строки располагаются в куче.
Согласно этому визуализатору кода Python, строки Python размещаются в стеке, а не в куче.
Почему это? Я думал, что они будут похожи на Java, где строки располагаются в куче.
Ответы:
Этот визуализатор не показывает строковые данные в стеке. Он показывает локальные ссылки на данные кучи как часть стека вызовов. Это очень похоже на Java, где String
ссылки - это локальные переменные, которые указывают на реальные String
объекты в куче.
Визуализатор может сделать любое упрощение представления, какое ему нужно. Это не означает, что «строки Python расположены в стеке» в любой конкретной реализации Python.
В своем ответе Грег сказал, что в куче располагаются строки.
Визуализатор решил отображать некоторые объекты в «рамочной» части, что мне кажется неправильным. К счастью, это мало влияет на тех, кто изучает Python, поскольку затронутые объекты (int, string) являются неизменяемыми. Поэтому рассуждения о последствиях все еще возможны.
Однако это создает ложное впечатление, что строки дублируются в памяти, когда вы делаете что-то вроде:
x = "hello"
y = x