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
的相同副本。为什么它会像这样。
答案 0 :(得分:3)
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