我真的很困惑,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应该是常数?