【发布时间】:2021-08-31 13:06:03
【问题描述】:
能否详细解释一下:
print(float(5.3) is float(5.3))#True
print(float(5) is float(5))#False
print(int(5) is int(5))#True
第一个返回 False,第二个返回 True。因此,如果你们能告诉我幕后发生的事情,我将不胜感激。 提前致谢:)
编辑:感谢每个人的 cmets,但我真的明白 ID 在第二种情况下是不同的,在第一种情况下是相同的。显然,可以使用 id() 找到它。 但我真正想知道的是为什么 ID 不同?
【问题讨论】:
-
我想一种更正确的检查对象是否相等的方法:
print(id(float(5)) == id(float(5))),它给出了True -
id(x) == id(y)应始终等同于x is y。但是,结果可能会因 Python 的不同版本或实现而异。 -
你不是在测试你认为你在这里的东西。同一行的两个字面量不会同时存在(只要调用
float()或int(),它们就有资格进行垃圾回收),因此您无法区分“对同一对象的两个引用”和“碰巧分配在同一内存地址的两个单独创建的对象”。 -
是的,很好。
-
@jasonharper 谢谢你,先生。你的回答看起来很有说服力。如果您不介意,如果您能详细地向我解释一下,我将不胜感激:)。就像您在这种情况下所说的垃圾收集一样。谢谢
标签: python