一、区别
1.is用于判断两个变量引用的对象是否为同一个对象,通俗说是比较对象的地址。
2.==用于判断两个变量引用对象的值是否相等,默认调用对象的eq ()方法。
二、详细说明
python中,一切皆对象。每个对象由三部分组成,即标识(identity)、类型(type)和值(value)。
a、b均赋值1000,使用==是判断a与b的值是否相等,相等为True;使用is是判断a与b的地址是否相等,很明显是不相等的,a的地址为64777136,b的地址为65907344。
图1三、整数缓存问题
Python 仅对较小的整数对象进行缓存,在命令行中执行时,将在范围为[-5, 256]内的整数对象缓存起来,而不是所有整数对象;而在Pycharm 或者将其保存为文件执行时,Python将在范围为[-5,任意正整数]内的整数对象缓存起来了。
1.在命令行中,c、d均赋值66,在[-5, 256]范围内,此时c与d的地址是一样的。
图22.在文件中运行时,a与b在范围外,没有暂时缓存,而c与d,e与f均暂时缓存了,地址一样。
图3四、总结
1.is 比较两个对象的id 是否相等,是否指向同一个内存地址;
2.== 比较的是两个对象的内容是否相等,值是否相等;
3.小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
4.is 运算符比 == 效率高,在变量和None 进行比较时,应该使用is。
网友评论