You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字节码中列表构建流程的疑惑及正误确认

Python列表构建字节码流程解析

首先是你给出的测试代码:

import dis
def f():
    a=[1,2,3]

dis.dis(f)

执行后得到的字节码输出:

2           0 RESUME                   0

  3           2 BUILD_LIST               0
              4 LOAD_CONST               1 ((1, 2, 3))
              6 LIST_EXTEND              1
              8 STORE_FAST               0 (a)
             10 LOAD_CONST               0 (None)
             12 RETURN_VALUE

你的猜测并不正确,每个指令的实际作用如下:

  • BUILD_LIST 0:创建一个空列表,把这个空列表的引用推到虚拟机栈顶。参数0表示初始预分配的元素容量为0,后续会根据需要扩展,并非标记或占位符。
  • LOAD_CONST 1:将常量池中索引为1的元组(1,2,3)作为一个整体推入栈顶。此时栈内从底到顶的结构是:[空列表引用, 元组(1,2,3)],并不是把元组元素逐个推入。
  • LIST_EXTEND 1:参数1代表从栈顶取出1个可迭代对象(也就是这个元组),然后把该可迭代对象的所有元素添加到之前创建的空列表里。执行完后,元组会被弹出栈,栈顶剩下的就是填充好元素的列表引用。
  • STORE_FAST 0 (a):弹出栈顶的列表引用,将其绑定到局部变量a(对应局部变量表中索引为0的位置)。

内容的提问来源于stack exchange,提问作者onlycparra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:55:04