Python;名称绑定不是对象引用?

Python; name bindings are not object references?

我想了解 Python 名称绑定到底是什么,以及何时解释此绑定。

在c,

include <stdio.h>
int main()
{
int X = 42;
int* Y[1];
Y[0] = &X;
X = 666;
printf("%d", *Y[0]);
return 0;
}

打印 666。我期待 Python 代码块:

X = 42
L = []
L.append(X) #3
X = 666
print(L) #5

做同样的事情,但事实并非如此。标记为 3 和 5 的行之间到底发生了什么? #3 是否使 另一个 引用称为“42”的对象,如 X,我们称它为 X',并将 X' 存储在 L 指向的对象中,即 [] ?

你说的是几乎会发生什么:

X = 42               # Create new object 42, bind name X to it.
L = []
L.append(X)          # Bind L[0] to the 42 object.
X = 666              # Create new object 666, bind name X to it.
print(L)             # Will not see the 666.

append不是将数组元素绑定到X,而是将它绑定到X后面的对象,42.

当我第一次意识到这就是 Python 的工作方式时,事情(具体来说,以前让我感到困惑并引起很多焦虑和咬牙切齿的事情)变得更加清晰。