2010-03-01 2 views
16

В C# значения типов (например, int, float и т. Д.) Хранятся в стеке. Параметры метода также могут быть сохранены в стеке. Однако все остальное хранится в куче. Это включает в себя списки, объекты и т. Д.CPython - внутри, что хранится в стеке и куче?

Мне было интересно, делает ли CPython то же самое внутри? Что он хранит в стеке и что он кладет на кучу?

+0

Я предполагаю, что вы имеете в виду * «Однако все остальное хранится на ** куче **.» * –

+8

Возможно, вы хотели сказать «CPython», а не «Python». Python - это язык; он не имеет никакого мнения о том, где объекты должны храниться, если реализация соответствует семантике, требуемой Python. CPython - это реализация Python, написанная на C, которую используют большинство людей. Ответы Джона Фэминеллы и Алекса Мартелли ниже обоих относятся к CPython. PyPy, Jython и IronPython имеют собственное мнение о том, где хранить объекты; К сожалению, я ничего не знаю о них. –

+0

@BlueRaja - Спасибо, хороший улов. –

ответ

20

Все объекты Python в реализации CPython переходят в кучу. Вы можете прочитать в деталях, как управление памятью Python работает here в документации:

Управление памяти в Python предполагает личное кучи , содержащую все объекты Python и структуры данных. Управление этой частной кучей обеспечивается внутренним менеджером памяти Python. Диспетчер памяти Python имеет различные компоненты, которые касаются различных аспектов управления динамическим хранилищем, таких как совместное использование, сегментация, предварительное распределение или кеширование.

Обратите внимание, что сам Python - это всего лишь язык и ничего не говорит о том, как работают внутренние элементы, такие как управление памятью; это детали, оставленные разработчикам.

11

выполнения Python наносит только ссылки на объекты (которые все живут в куче): то, что идет на стек Python (как операнды и результаты его байткодом операций) всегда ссылки (до значений, которые живут в другом месте).

+3

Не могли бы вы объяснить больше о том, что происходит в стеке Python, всегда являются ссылками или предоставляют некоторую ссылку? – laike9m