【发布时间】:2019-10-21 18:00:44
【问题描述】:
docs 中的身份比较描述了is 表达式的结果取决于对象身份。
运算符
is和is not测试对象的身份:当且仅当x和y是同一个对象时,x is y为真。使用id()函数确定对象的身份。x is not y产生逆真值。
但下面的代码显示了不同的结果。
id(object()) == id(object()) # True
object() is object() # False
object() is object() 结果必须是 True 由于文档描述。
【问题讨论】:
-
这不是了解正在发生的事情的好方法。首先将它们存储为变量。
object()这里是什么? -
调用
object()意味着你正在调用构造函数来调用object;所以基本上,您正在比较同一类的两个不同实例。检查obj = object(); another = obj; obj is another -
ID 被重复使用。您没有保留对对象的任何引用,并且 ID 在它们被放弃后变得可用。在第一个测试中,创建了两个对象,它们不同时存在,并且被赋予相同的 ID。在第二个测试中,直接比较了两个对象,因此它们确实同时存在(并且确实具有不同的 ID)。
标签: python