我需要比较两个对象实例的相等性,通常我想用is
时这样做;然而,经过几个小时的调试,有些代码失败了,有时我发现了这个。只是我调试的代码片段。
print "EVENT OBJECT:", id(event.source), "AND BINDING COMPONENT:", id(self.component), "IS THE SAME:", event.source is self.component
输出:
事件对象:4和绑定组件:4是相同的:错误
但是,请使用==
,例如:
print "EVENT OBJECT:", id(event.source), "AND BINDING COMPONENT:", id(self.component), "IS THE SAME:", event.source == self.component
输出:
事件对象:4和绑定组件:4是相同的:真实
我追求的结果是第二个输出。
任何可以解释的人?以为我使用is
做对了。我是Python的新手,几个月前才开始使用.Net和C#。
编辑:
不是this的重复,因为我认为我确实知道is
和==
之间的区别。事实上,我确实阅读了其他帖子,他们似乎没有回答我关于为什么帖子中的代码表现得像它的问题。
更新
这是我存储组件的 init 方法的片段。
def __init__(self, component, *bindings):
self.__dict__['component'] = component
print "COMPONENT ID:", hex(id(component)), "COMPONENT IN SELF ID", hex(id(self.component))
self.__dict__['_bindings'] = bindings
输出:
COMPONENT ID:自身ID 0x18中的0x18组件
然后在事件处理程序中:
print "EVENT OBJECT:", hex(id(event.source)), "AND BINDING COMPONENT:", hex(id(self.component)), "IS THE SAME:", event.source is self.component
我得到了这个输出:
事件对象:0x18和绑定组件:0x18是相同的:错误
答案 0 :(得分:-1)
is
运算符仅在两个对象指向同一变量时才返回True。考虑以下情况:
>>> x = [5, 2, 1]
>>> print(hex(id(x)))
'0x7fcefeb45bc8'
>>> y = [5, 2, 1]
>>> print(hex(id(y)))
'0x7fcefeb45b88'
>>> print x is y
False
>>> z = y
print(hex(id(z)))
'0x7fcefeb45bc8'
>>> print y is z
True