全局变量的python标识

时间:2015-01-09 15:59:28

标签: python global identity

def func():
      global x
      print 'x is', x
      x = 2
      print id(x)
      print 'Changed global x to', x

x = 50
print id(x)
func()
print 'Value of x is', x
print id(x)

输出

32308172
x is 50
32308748
Changed global x to 2
Value of x is 2
32308748

我希望id()应该为所有三次返回相同的值,因为全局使用x的相同副本。为什么它会像这样。

3 个答案:

答案 0 :(得分:3)

Python中的“变量”只是您附加到对象的标签。函数id()返回传递给它的对象的id,而不是“变量”的id。如果您将名称指向其他对象,您将获得不同的ID。

答案 1 :(得分:0)

他们指的是不同的对象("小整数")。例如,请参阅http://www.laurentluce.com/posts/python-integer-objects-implementation/

由于整数是不可变的,如果变量的值发生变化,(全局)名称x会引用不同的内存位置。

答案 2 :(得分:0)

更改x值的原因是因为您在函数中将x定义为global,因此python威胁将x作为模块范围内的全局变量,以及id你的对象将被改变为整数是不可变的,并在分配python后为你的对象创建一个新的地址。

如果您不使用功能,您将看到相同的结果:

>>> x=2
>>> id(x)
33263936
>>> x=4
>>> id(x)
33263888