为什么id()在IronPython上的结果不等于id()在Python上的结果?

时间:2011-10-13 08:05:45

标签: python ironpython

我真的很混淆IronPython上与Python不同的id()函数行为。让我告诉你以下代码,

在IronPython中:

>> s = "hello"
>> a = len(s)
>> id(a)
44
>> a = len(s)
>> id(a)
45

正如您所看到的,每次调用都会更改id()的结果。但是,在Python中,不能更改。

在Python中:

>> s = "hello"
>> a = len(s)
>> id(a)
2633845
>> a = len(s)
>> id(a)
2633845

我知道id()函数返回其单个参数的对象标识号(ID)。为什么两个python解释器给我一个不同的结果?

2 个答案:

答案 0 :(得分:2)

CPython有一个常量小整数的缓存,可以在需要时使用。这个整数池是一个优化并提高了性能,因为根据需要不需要为每个小整数分配新对象。显然,IronPython处理的方式不同。

也就是说,id()函数返回唯一标识对象的数字。您可以使用它来查看两个名称是否绑定到同一个对象。您无法使用此值来查看两个对象在任何意义上是否“相等”。

答案 1 :(得分:1)

http://docs.python.org/library/functions.html#id

返回对象的“身份”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。

Python实现细节:这是内存中对象的地址。

为什么你认为id会不变?