搜索时,我注意到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
答案 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 answer至Why is the id of a Python class not unique when called quickly?
答案 2 :(得分:0)
来自文档:
id(object):返回对象的“标识”。这是一个整数(或长整数),保证在该生命周期内该对象是唯一且恒定的。
您正在创建类Car
的两个不同实例,即ferrari
和lamborghini
,因此它们的标识符不同。