首页 > 解决方案 > 在处理元组/列表时,Python 的堆栈是如何工作的?

问题描述

我在 Python文档中看到BUILD_TUPLE指令“从堆栈中创建一个消耗计数项的元组,并将生成的元组推入堆栈”。

它真的推动了元组本身吗?如果元组包含大量元素怎么办?它是如何放置在堆栈上的?

标签: pythonpython-3.xstackpython-internalspythoninterpreter

解决方案


在@juanpa.arrivillaga 的回答和我第一次玩这个dis模块之后……</p>

分解琐碎的功能可能是有益的:

def foo(a, b, c):
  return (a, b, c)

这导致:

  2           0 LOAD_FAST                0 (a)
              2 LOAD_FAST                1 (b)
              4 LOAD_FAST                2 (c)
              6 BUILD_TUPLE              3
              8 RETURN_VALUE

换句话说:我们确保堆栈顶部有正确的参数值,然后将它们全部弹出并用(引用)单个元组替换它们。

这就是stack machine的传统操作方式,我相信 CPython 是(至少部分)模仿的,例如,python 基于堆栈是什么意思?


推荐阅读