假设我在Python中有一个类,它具有为比较属性而定义的eq方法:
class Foo(object):
# init code...
def __eq__(self, other):
# usual eq code here....
如何比较两个Foo实例的参考相等性(即如果它们是同一个实例则测试)?如果我这样做:
f1 = Foo()
f2 = Foo()
print f1 == f2
即使它们是不同的对象,我也是真的。
答案 0 :(得分:46)
那是is
运营商
print f1 is f2
答案 1 :(得分:3)
f1 is f2
检查两个引用是否属于同一个对象。在引擎盖下,这将使用id(f1) == id(f2)
内置函数比较id
的结果,该函数返回一个保证对象唯一的整数(但仅在对象的生命周期内)。
在CPython下,这个整数碰巧是内存中对象的地址,虽然文档提到你应该假装你不知道(因为其他实现可能有其他生成id的方法)。
答案 2 :(得分:2)
使用is
关键字。
print f1 is f2
使用is
关键字的一些有趣的东西(我认为是依赖于实现的,但在CPython中是正确的)是None,True和False都是单例实例。因此True is True
将返回True。
字符串也在CPython中实现,因此'hello world' is 'hello world'
将返回True(你不应该在普通代码中依赖它)。