Python3学习笔记之is == in
短信预约 -IT技能 免费直播动态提醒
意义
==
比较的是两个对象的值是否相等,比较常用
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) #True
is
比较的是两个对象是不是同一个实例对象,它们的内存地址是否相同
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) #False
b = a
print(a is b) #True
in
是判断是否包含,即判断一个集合(如list、tuple
)是否包含这个元素,a in a
是False
是因为[1, 2, 3]
这个列表并不在[1, 2, 3]
这个列表中,[1, 2, 3]
这个列表包含的元素只有1, 2, 3
a = [1, 2, 3]
print(1 in a) #True
print(a in a) #False
注意点
- 通常我们见到的都是
==
而很少见到is
,那么什么时候使用is
呢?当在变量和单例值之间比较时,用is
的效率更高。目前最常使用is
的地方是判断对象是否为None
。is
的效率更高是因为它不能进行函数重载,不用进行特殊的函数调用,直接比较两个对象的id;而==
则调用了对象的__eq__()
方法,继承自object
的对象的__eq__()
方法直接比较两个对象的id,这结果与is
一样,但大多数时候继承object
的类会覆盖__eq__()
方法,因此比较的就是对象的值了,效率也降低了。
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a)) #139889039143432
print(id(b)) #139889039117576
print(a is b) #False
print(a == b) #True
- python中有常量池,会把常用的整数对象和字符串对象都缓冲起来,在此范围内的对象如果值相同,指向的都会是同一个对象。
a = 21
b = 21
print(a is b) #True
a = "python3.7"
b = "python3.7"
print(a is b) #True
- 对于整数,python全局解释器仅对[-5, 256]范围内的整数进行了缓冲,超过此范围的整数得到的结果依然会是
False
。但这仅是在命令行中执行得到的结果,如果在Pycharm或保存为文件执行,就没有这个范围的限制,因为解释器做了一部分优化
命令行
>>> a = -6
>>> b = -6
>>> a is b
False
>>> a = 257
>>> b = 257
>>> a is b
False
保存为文件执行
a = -6
b = -6
print(a is b) #True
a = 257
b = 257
print(a is b) #True
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341