我真的很混淆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解释器给我一个不同的结果?
答案 0 :(得分:2)
CPython有一个常量小整数的缓存,可以在需要时使用。这个整数池是一个优化并提高了性能,因为根据需要不需要为每个小整数分配新对象。显然,IronPython处理的方式不同。
也就是说,id()
函数返回唯一标识对象的数字。您可以使用它来查看两个名称是否绑定到同一个对象。您无法使用此值来查看两个对象在任何意义上是否“相等”。
答案 1 :(得分:1)
http://docs.python.org/library/functions.html#id
返回对象的“身份”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。
Python实现细节:这是内存中对象的地址。
为什么你认为id会不变?