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



我真的很困惑,IronPython上的id()函数的行为与Python不同。让我向您展示以下代码

在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解释器给我一个不同的结果?

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

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

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

返回对象的"标识"。这是一个整数(或长整数),保证该对象在其生命周期内是唯一的和恒定的。两个生命周期不重叠的对象可以有相同的id()值。

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

为什么你认为id应该是常数?

最新更新