两个object()的身份比较

时间:2019-06-06 08:38:01

标签: python

docs中的身份比较描述了is表达式的结果取决于对象身份。

  

运算符isis not测试对象的身份:x is y为真,当且仅当xy是同一对象。使用id()函数确定对象的身份。 x is not y产生反真值。

但是下面的代码显示了不同的结果。

id(object()) == id(object())  # True
object() is object() # False
根据文档的描述,

object() is object()结果必须为True

1 个答案:

答案 0 :(得分:4)

调用object构造函数(我的意思是object()),每次分配并构造具有新 available id的新 object 实例在当前范围内。

a = object()
b = object()

id(a) == id(b)    # False
a is b            # False

Python垃圾收集器,在对象变得不可用时(例如超出范围,解构对象等)收集对象,并使分配的内存可用。因此,它们的 id 将可用于将来将要构建的下一个对象。

因此在以下代码段中,

object() is object()            # False
id(object()) == id(object())    # True

在第一行中,同时创建两个对象进行比较,然后由垃圾收集器进行收集。因此,它们具有不同的 id ,而且不相同。

在第二行中的

,将创建​​第一个对象,并提取其 id 进行比较,然后对其进行解构(因为由垃圾收集器进行收集)。第二个对象使用第一个可用的 id ,这是从第一个对象刚刚收集的 id 。因此它们具有相同的 id