python - 在处理元组/列表时,Python 的堆栈如何工作?

标签 python python-3.x stack python-internals pythoninterpreter

我在Python中看到documentation BUILD_TUPLE 指令“创建一个消耗堆栈中 count 项的元组,并将生成的元组插入堆栈。”

它真的插入元组本身吗?如果元组包含大量元素怎么办?它是如何放入堆栈的?

最佳答案

进一步@juanpa.arrivilillaga的回答和我第一次使用dis模块......

反汇编这个简单的函数可能会有启发:

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(至少部分)是模仿的,例如What does it mean that python is stack based?

关于python - 在处理元组/列表时,Python 的堆栈如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364821/

相关文章:

Python Pandas Lambda 行重命名匿名函数?

java - Java 中的 Jython 错误 : ImportError: No module named type_check

java - 为什么 java.util.Stack 不使用 LinkedList 的复合模式,而是使用 Vektor?

java - 无法从堆栈中弹出项目

java - ArrayList 初始大小不起作用

python - Django项目中 `from django.conf import settings`和 `import settings`有什么区别

python - 如何在系列的开头追加/插入项目?

python - 关于Python中的time.time()

python - Pandas dataframe 在不同的 dataframe 中查找一个值并赋值

python - 在 python3 上使用 python 调试器会抛出 NameError : name 'raw_input' is not defined