在C#中,值类型(例如:int,float等)存储在堆栈中。方法参数也可以存储在堆栈中。但是,大多数其他内容都存储在堆上。这包括列表,对象等。
我想知道,CPython在内部做同样的事情吗?它在堆栈上存储了什么,它在堆上放了什么?
答案 0 :(得分:20)
CPython实现中的所有Python对象都在堆上。您可以在文档中详细阅读Python的内存管理如何工作 here :
Python中的内存管理涉及包含所有Python对象和数据结构的私有堆。 Python内存管理器在内部确保对此私有堆的管理。 Python内存管理器具有不同的组件,可处理各种动态存储管理方面,如共享,分段,预分配或缓存。
请注意,Python本身只是一种语言,并且没有说明内存管理等内部应该如何工作;这是实施者留下的细节。
答案 1 :(得分:12)
Python的运行时只处理对象的引用(它们都存在于堆中):Python的堆栈上的内容(作为操作数和字节码操作的结果)总是引用(对于生存的值)其它地方)。