2017-03-16 78 views
0

有人能解释为什么我的变量x返回到它的这些步骤后,前ID:为什么Python中的变量在来回转换之后返回到原ID?

>>> x = 10 
>>> id(x) 
497834400 
>>> x = str(x) 
>>> id(x) 
48840576 
>>> x = int(x) 
>>> id(x) 
497834400 
+0

x'的'转换之前和之后的值是相同数量的10.这就是为什么它具有相同的ID。 – DyZ

+1

@DYZ虽然对于对象通常不是真的,但对于在-5到256之间的整数,仅在CPython上才是真实的 –

+0

@ juanpa.arrivillaga我没有推广到_objects_,我只是提出了10的索赔。我同意你的其他评论。 – DyZ

回答

3

Python从[-5, 256]缓存整数,这意味着(在同一运行时间内)上述范围内的整数始终具有相同的id

看到这个question,它是伟大的answer更多细节。

+1

非常有趣。用x = 300进行测试后,ID确实发生了变化。 – None

-2

变量int数据类型为寿命和x的生命周期中可用还没有完成。 实际上,它通过将x转换回int来指向x的int类型。

1

因为10是python中所谓的小整数。 Python会将[-5,257)之间的小整数缓存在名为“small_ints”的池中。所以[-5,257]中的整数实例都是在整个python中共享的,这就是id(10)总是返回相同地址的原因。

0
What is the number returned from the function id() ? 

它是“这是保证其寿命期间该对象独特和恒定的整数(或长整数)。” (Python标准库 - 内置函数)唯一编号。没有更多,也没有少。把它看作是Python对象的社会安全号码或员工身份号码。

Is it the same with memory addresses in C ? 

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

what-does-id-function-used-for