首页 > 解决方案 > 两个对象的身份比较()

问题描述

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

对象身份的运算符is和测试:当且仅当和是同一个对象时为真。使用该函数确定对象的身份。产生逆真值。is notx is yxyid()x is not y

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

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

object() is object()结果必须True归因于文档描述。

标签: python

解决方案


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

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并且它们是不一样的。

在第 2 行中,创建第一个对象并提取其id进行比较,然后将其解构(导致垃圾收集器收集)。第二个对象使用第一个可用的id,这是刚刚从第一个对象收集的id 。所以他们有相同的id


推荐阅读