Python3中is与==的区别#Python学习02#

一、区别

1.is用于判断两个变量引用的对象是否为同一个对象,通俗说是比较对象的地址。

2.==用于判断两个变量引用对象的值是否相等,默认调用对象的__eq__ ()方法。

二、详细说明

python中,一切皆对象。每个对象由三部分组成,即标识(identity)、类型(type)和值(value)。

a、b均赋值1000,使用==是判断a与b的值是否相等,相等为True;使用is是判断a与b的地址是否相等,很明显是不相等的,a的地址为64777136,b的地址为65907344。

 

 

 

 

 

 

三、整数缓存问题

Python 仅对较小的整数对象进行缓存,在命令行中执行时,将在范围为[-5, 256]内的整数对象缓存起来,而不是所有整数对象;而在Pycharm 或者将其保存为文件执行时,Python将在范围为[-5,任意正整数]内的整数对象缓存起来了。

1.在命令行中,c、d均赋值66,在[-5, 256]范围内,此时c与d的地址是一样的。

 

2.在文件中运行时,a与b在范围外,没有暂时缓存,而c与d,e与f均暂时缓存了,地址一样。

四、总结

1.is 比较两个对象的id 是否相等,是否指向同一个内存地址;
2.== 比较的是两个对象的内容是否相等,值是否相等;
3.小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
4.is 运算符比 == 效率高,在变量和None 进行比较时,应该使用is。

原文地址:https://www.cnblogs.com/cxyxm/p/12589674.html