Python中使用is运算符比较浮点数为何返回False?
为什么Python中用
is比较浮点数会返回False? is和==的本质区别is用来判断两个变量是否指向内存中的同一个对象,比的是身份(内存地址)==用来判断两个对象的值是否相等,比的是内容
比如运行这段代码:
num1 = 0.5 num2 = 0.5 print(num1 == num2) # 输出 True print(num1 is num2) # 输出 FalsePython的对象缓存规则
Python会对小范围整数(通常是-5到256)做缓存,重复使用同一块内存的对象,所以用is比较这些整数会返回True,但浮点数不享受这种缓存待遇。每次定义一个浮点数,Python都会在内存里新建一个对象,哪怕值和之前的一样,内存地址也不同,is比较自然返回False。特殊情况:同一对象的引用
如果两个变量指向的是同一个浮点数对象,is会返回True:num1 = 0.5 num2 = num1 print(num1 is num2) # 输出 True这里num2只是num1的引用,两者指向同一块内存,所以身份判断为真。
内容的提问来源于stack exchange,提问作者Tanjila 486 013
相关产品推荐
相关产品推荐

