CPython - 栈和堆中存储的内容是什么?

19 投票
2 回答
3207 浏览
提问于 2025-04-15 19:50

在C#中,值类型(比如:整数int、浮点数float等)是存放在栈上的。方法的参数也可能存放在栈上。不过,其他大部分东西都是存放在堆上的,比如列表、对象等等。

我在想,CPython内部是不是也这样处理?它把什么放在栈上,什么又放在堆上呢?

2 个回答

14

Python在运行时只处理对象的引用(这些对象都存放在堆内存中):在Python的栈上(作为字节码操作的操作数和结果)总是存放引用(指向存放在其他地方的值)。

21

在CPython这个版本的Python中,所有的Python对象都会放在一个叫做“堆”的地方。你可以在文档中详细了解Python是怎么管理内存的,具体内容可以点击这里查看:

Python的内存管理涉及一个私有的堆,这个堆包含了所有的Python对象和数据结构。这个私有堆的管理是由Python的内存管理器内部来完成的。Python的内存管理器有不同的部分,负责处理各种动态存储管理的方面,比如共享、分段、预分配或者缓存。

需要注意的是,Python本身只是一种编程语言,并没有规定像内存管理这样的内部细节应该怎么运作;这些细节是留给实现者去处理的。

撰写回答