我有一个整数变量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
因为整数是不可变的,也就是说您不能更改它们。
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在这种情况下的行为是未定义的。 :-)