python-"is" v.s. "=="

来源:互联网 发布:返利机器人源码 编辑:程序博客网 时间:2024/06/05 15:15

先说结论:“==”只是判断两个变量是否相等,“is”则判断两个变量是否是同一对象。
看例子:

>>> int_a = 1>>> int_b = 1>>> int_a == int_bTrue>>> int_a is int_bTrue>>> int_c = 10000>>> int_d = 10000>>> int_c == int_dTrue>>> int_c is int_dFalse

这是为什么呢?再看看这四个变量的id:

>>> id(int_a)1908736464>>> id(int_b)1908736464>>> id(int_c)2471603994928>>> id(int_d)2471603994864

可以看到int_aint_b的id是相同的,但是int_cint_d是不同的,至于为什么id不同,就牵扯到在《 python-对象之hashable&unhashable与immutable&mutable》里面提到的“解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象”。由此看出,”is”实际上比较的是id,可以理解为对象的地址,”==”比较的是值,就算两个变量存储位置不同,只要值相同,”==”就会返回True。所以说”is”比”==”更加严格,“==”只是表示这两个变量相等,“is”则表示这两个变量是同一个对象。

补充一句:判断一个实例是不是某对象的实例,可以使用isinstance(instance_name, class_name)

0 0
原创粉丝点击