两个对象的身份比较()

2024-04-23 16:54:59 发布

您现在位置:Python中文网/ 问答频道 /正文

docs中的身份比较描述了is表达式的结果依赖于对象身份。你知道吗

The operators is and is not test for an object’s identity: x is y is true if and only if x and y are the same object. An Object’s identity is determined using the id() function. x is not y yields the inverse truth value.

但下面的代码显示了不同的结果。你知道吗

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

object() is object()结果必须是True,因为文档描述。你知道吗


Tags: andthe对象idtruedocsifobject
1条回答
网友
1楼 · 发布于 2024-04-23 16:54:59

调用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!你知道吗

相关问题 更多 >