在Python+IDLE中使用id()函数比较两个对象的结果不同

2024-09-27 20:15:53 发布

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

搜索时,我注意到id()函数返回一个整数,并保证对象的唯一性和常量。你知道吗

当比较两个不同的对象得到结果时,哪一个可能允许这些不同的结果??你知道吗

我在一本电子书中看到一个例子,比较id(Car()) == id (Car())返回False,但运行相同的代码时返回True

班级汽车.py你知道吗

class Car:
    pass

代码处于空闲状态

>>> from Car import Car
>>> ferrari = Car()
>>> lamborghini = Car()
>>> id(lamborghini) == id(ferrari)
False
>>> id(Car()) == id(Car())
True

https://docs.python.org/3/library/functions.html#id


Tags: 对象函数代码idfalsetrue整数电子书
3条回答

如果你想知道为什么id(ferrari) == id(lamborghini)是假的,而id(Car()) == id(Car())是真的。这是因为当你说ferrari = Car()时,Python会根据Car结构生成一个新的对象。所以ferrari是一个新对象,只有ferrari才有唯一的id。你知道吗

id(Car()) == id(Car())中,真正的评估来自这样一个事实:Car对象不在id()调用之外。你知道吗

我希望这有帮助!你知道吗

任何对象的id都应该是唯一的,因此id(Car()) == id(Car())似乎应该是False,但它的计算结果是True。但是,对象的id只保证在该对象的生存期内是唯一的。因为这些Car对象是暂时的,所以它们的持续时间只够传递给id()然后被垃圾收集。Python正在计算==的一边、垃圾收集,然后计算另一边。在这个过程中,id会被每个Car()对象重用。你知道吗

有关详细说明,请参见abarnert's answerWhy is the id of a Python class not unique when called quickly?

根据文件:

id(object):返回对象的“标识”。这是一个整数(或长整数),该整数在对象的生存期内保证是唯一的和常量。你知道吗

您正在创建类Car的两个不同实例,即ferrarilamborghini,因此它们的标识符是不同的。你知道吗

相关问题 更多 >

    热门问题