在创建变量期间 Python 之前发生了什么?

what's happen earlier in Python during creating a variable?

解说员是起名还是起物? 例如: VAR = 100 最初,解释器创建一个名称 VAR 并为 VAR 分配一个值为 100 的对象,或者解释器创建一个具有值 100 的对象并进一步创建一个名称 VAR 并为其分配一个对象 ?

它创建了一个新对象,但是根据this documentation,已经为-5256之间的所有整数创建了可以使用的对象,所以在你的示例 Python 已经为 100 创建了一个整数对象,它将被引用而不是创建一个全新的对象。

回答你的下一个问题,if var=257 Python 仍然会创建一个对象。首先创建什么?好吧,有一个名为 dis 的模块可以让我们将任何 Python 代码反汇编为生成的字节码。如果我们这样做

dis.dis('var = 257')

然后我们得到

  1           0 LOAD_CONST               0 (257)
              2 STORE_NAME               0 (var)
              4 LOAD_CONST               1 (None)
              6 RETURN_VALUE

您可以看到每个字节码指令的作用here

STORE_NAME 的字节码指令说(TOS 代表栈顶):

STORE_NAME(namei)

Implements name = TOS. namei is the index of name in the attribute co_names of the code object.

如果在 cPython 的 PyLongObject (cPython's int object) is created. Often times the compile.c 文件之前将名称添加到 co_names(代码对象名称),则不会共享更多信息,从而更好地了解字节码操作的工作原理在幕后,但我无法在源代码中找到您问题的确切答案。我想 PyLongObject 首先创建然后添加到 co_names 否则你必须添加名称并将其设置为 null 然后在创建 [= 后返回并更改它18=],这只是更混乱和更慢。