Python中的堆栈是什么?

问题描述 投票:3回答:3

我们在Python中怎么称呼“堆栈”?它是CPython的C堆栈吗?我读到Python堆栈帧是在堆中分配的。但是我认为堆栈的目标是...堆栈堆栈框架。那么堆栈会做什么?

python cpython python-internals
3个回答
4
投票
是什么?

略微简化:

在CPython中,当PyEval_EvalFrameEx评估Python堆栈框架的代码并进行直接函数调用时,它将分配一个新的Python堆栈框架,将其链接起来……然后在该新框架上递归调用PyEval_EvalFrameEx。] >

因此,C

堆栈是解释器循环的递归调用的堆栈。

Python

堆栈是Python框架对象的堆栈,实现为堆已分配对象的简单链接列表。

它们并不是完全无关的,但是它们不是同一回事。

使用生成器时,这会变得更加混乱,因为当恢复它们时,这些Python堆栈框架可以在不同的位置取消链接和重新链接。这就是两个堆栈分开的原因。 (请参阅Ned的答案,这比我能解释的要好。)


7
投票

Python的堆栈框架分配在堆上。但是它们彼此链接在一起形成一个堆栈。当函数PyEval_EvalFrameEx调用函数a时,b堆栈帧指向b堆栈帧作为下一帧(从技术上讲,aa帧的f_back属性。)] >

在堆上分配堆栈帧使生成器成为可能:当生成器产生一个值,而不是丢弃其堆栈帧时,只需将其从当前堆栈帧的链接列表中删除,然后保存到一边。然后,当生成器需要恢复时,其堆栈框架将重新链接到堆栈中,并继续执行。


0
投票
b
© www.soinside.com 2019 - 2024. All rights reserved.