提问者:小点点

为什么增加像x+=5这样的变量会改变变量ID?


我有一个整数变量x,当我通过添加一些整数来修改这个变量时,这个变量的位置就会改变。 有人能解释一下原因吗?

x=5

print(f"The location of x is : {id(x)}")

x+=5

print(f"The location of x is : {id(x)}")

输出:

The location of x is : 1934686192
The location of x is : 1934686272

共3个答案

匿名用户

因为整数是不可变的,也就是说您不能更改它们。

x+=5实际上是x=x+5,其中我们定义了另一个变量,也名为x

我们为它分配的值是x+5

匿名用户

你的帖子提出了几个问题:

函数返回的数字是多少?

它是“一个整数(或长整数),它被保证在这个对象的生存期内是唯一的,并且是常量的。” (Python标准库内置函数)唯一的数字。 不多也不少。 将其视为Python对象的社会安全号或雇员id号。

C中的内存地址也是这样吗?

从概念上来说,是的,因为它们都保证在它们的一生中在宇宙中是独一无二的。 在Python的一个特定实现中,它实际上是相应C对象的内存地址。

您没有更新x的值,您正在用新值初始化一个新的x对象,在python中,每个值都像一个不同的容器,每个值都有一个特定的id

>>> a=5
>>> id(a)
140708360427296
>>> b=5
>>> id(b)
140708360427296
>>> a+=5
>>> id(a)
140708360427456
>>> b+=5
>>> id(b)
140708360427456
>>> id(5)
140708360427296
>>> id(10)
140708360427456
>>> 

希望这能帮到你!

匿名用户

这里的所有答案都在说同样的事情,但遗漏了一些东西。
您可以看到,介于-5和256之间的int的id总是相同的。

id(10)
94663912748064
id(5+5)
94663912748064
>>> x = 5
>>> y = 5 # hoping this would mean a new object
>>> x is y
True

所以python中的int是一个单例吗? 对于给定的数字,总是指向同一个对象,嗯,不完全是。 python3参考文献提到,

当前的实现为-5到256之间的所有整数保留了一个整数对象数组,当您在该范围内创建int时,实际上您只得到了对现有对象的引用。 所以应该可以更改1的值。 我怀疑Python在这种情况下的行为是未定义的。 :-)

相关问题