一:同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。
运算符 | 描述 |
is | is是判断两个标识符是不是引用同一个对象 |
is not | is not 是判断两个标识符是不是引用不同对象 |
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个,既比较对象的地址。
== 用于判断两个变量引用对象的值是否相等,默认调用对象的 __eq__()方法。
二:整数缓存问题
Python仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行时,而在Pycharm或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])。
总结:
1、is 比较两个对象的 id 值是否相等,是否指向同一个内存地址;
2、== 比较的是两个对象的内容是否相等,值是否相等;
3、小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
4、is 运算符比 == 效率高,在变量和None进行比较时,应该使用 is。
【操作】同一运算符测试
1 >>> a=1000 2 >>> b=1000 3 >>> a == b 4 True 5 >>> a is b 6 False 7 >>> id(a) 8 1799963429808 9 >>> id(b) 10 1799964263632 11 >>> c = 10 12 >>> d = 10 13 >>> c is d 14 True 15 >>> id(c) 16 140735929836656 17 >>> id(d) 18 140735929836656