【发布时间】:2011-02-23 18:31:51
【问题描述】:
id() 内置函数提供...
一个整数(或长整数),保证在其生命周期内对于此对象是唯一且恒定的。
is 运算符反而给出...
对象身份
那么为什么可能有两个对象具有相同的id 但将False 返回到is 检查?这是一个例子:
>>> class Test():
... def test():
... pass
>>> a = Test()
>>> b = Test()
>>> id(a.test) == id(b.test)
True
>>> a.test is b.test
False
一个更令人不安的例子:(继续上面的)
>>> b = a
>>> b is a
True
>>> b.test is a.test
False
>>> a.test is a.test
False
但是:
>>> new_improved_test_method = lambda: None
>>> a.test = new_improved_test_method
>>> a.test is a.test
True
【问题讨论】:
-
对于一个实际的程序或元类绝地思维技巧,我需要这个,请注意。我在火车上很无聊,我试过了:)
-
我认为重要的问题是为什么
a.test is a.test是假的。一旦你知道其余的应该是有意义的...... -
漏油事件很好,很漂亮,它很快就会来到你附近的一个城市!也许你应该组织一些聚会来庆祝它的到来!
-
== 是完全独立的。这是一个 is 并不意味着相等的情况。
a = float('nan'); print a is a, a == a -
@Paul:我没有问
a == b,我问的是id(a) == id(b):)