cpython中id函数的奇怪行为

时间:2016-09-07 03:19:06

标签: python python-2.7

我做了以下事情:

>>> a=10
>>> id(a)
31817408L
>>>
>>> id(10)
31817408L

因此,我们可以看到id(a)等于id(10)

现在,我做

>>>a='what is this'
>>> id(a)
   35412416L
>>>
>>>
>>>
>>> id('what is this')
   31951968L

为什么在这种情况下id(a)不等于id('这是什么')? 幕后实际发生了什么?

1 个答案:

答案 0 :(得分:2)

不同的ID意味着内存中的地址不同,所以你的两个“这个”字符串实际上是两个字符串,即使它们存储相同的值。另一方面,Python优化了常用的整数,以便所有出现的内容都指向同一个对象。幸运的是,该对象是不可变的,所以你不能说10 = 9。如果你选择一个不经常使用的整数,你可以看到发生了什么:

>>> a=555555
>>> id(a)
44506456L
>>> id(555555)
44506528L