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

时间:2015-10-14 01:32:59

标签: python name-binding

我试图了解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是否为另一个引用了一个名为&#34; 42&#34;的对象,如X,我们称之为X&#39;,并存储X&#39;在L指向的对象中,哪个是[]?

1 个答案:

答案 0 :(得分:5)

您所说的几乎会发生什么:

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的工作方式时,事情(特别是像以前这样让我感到困惑并引起很多焦虑和咬牙切齿的事情)变得更加清晰。