符号表存的是字符串,怎么关联到运行期间local和global的字典,这两个字典运行期间才有啊,符号表是在编译期生成,怎么能关联到运行期间的命名空间?
co_consts:常量表MAKE_FUNCTION 之前通常有LOAD_CONST <index into co_consts>
PyCodeObject * 压栈,随后 MAKE_FUNCTION 把它取出来组装成 PyFunctionObject。co_names / co_varnames / co_freevars / co_cellvars:符号表PyCodeObject 的实体 → 存在 co_constsPyFunctionObject → 存在栈帧的命名空间(dict 或 fastlocals)MAKE_FUNCTION 0(或 3.11+ 的 MAKE_FUNCTION)只干三件事:STORE_NAME/STORE_FAST/STORE_GLOBAL 指令把它放进某个命名空间(模块 __dict__、局部变量数组或闭包单元)。STORE_* 字节码塞进当前帧的 locals、globals 或 closure 里。PyCodeObject 不是“实体”,它是一个 C 结构体,表示一段代码的静态信息(字节码、常量、变量名等),在编译期就已经构造好。
2. 常量表不是在运行期生成的,它是编译器在 compile() 阶段就填充好的。
3. 运行期只是加载这些结构,而不是重新生成它们