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

时间:2016-10-25 15:00:58

标签: python python-3.x

搜索时,我注意到id()函数返回一个整数,并保证对象是唯一且常量的。

当比较两个不同的对象获得结果时,可能已经允许这些不同的结果??

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

类Car.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

3 个答案:

答案 0 :(得分:1)

如果您想知道为什么id(ferrari) == id(lamborghini)为假,id(Car()) == id(Car())为真。这是因为当您说ferrari = Car()时,Python会在Car结构上生成一个基于的新对象。因此ferrari新对象,其唯一ID仅限于ferrari

id(Car()) == id(Car())中,真正的评估来自Car个对象不在[{1}}调用之外的事实。

我希望这有帮助!

答案 1 :(得分:1)

任何对象的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?

答案 2 :(得分:0)

来自文档:

id(object):返回对象的“标识”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。

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