python中is与双等于号“==”的区别示例详解


Posted in Python onNovember 21, 2017

前言

在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

发现问题

最近在给小伙伴写段小代码用于爬取一个GIS的各高层数据,python中使用了”is”来代替”==”,结果下载至512的时候出了问题。

代码如下

def get_next(x, y, z):
 z += 1
 if z is 2**x: # 应该用if z == 2**x
 y += 1
 z = 0
 if y is 2**(x+1):
 x += 1
 y = 0
 return x, y, z

这是用来获取下一个高层数据的URL的函数,结果第二天,小伙伴告诉我说下载到x == 9, y == 0, z == 512的时候停止下载了。

探索

首先,根据上述代码可以知道,z按照逻辑是不可能等于512的,所有开始怀疑是不是这个函数有问题,但是这么简单的函数,怎么看都不应该有问题啊。于是开始跟代码,发现

if z is 2**x

处,x == 9, y == 0, z == 512时,if后面居然返回的是False。我拿计算器算了好几遍,确定自己不是在二次元后,开始怀疑is的问题。

结果

在StackOverflow上面找到了答案

Is there a difference between == and is in Python?

is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.

>>> a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:

>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

然后自己写了个小段子看看最大的可复用的int是多大

a = 0
b = 0
while a is b:
 a += 1
 b += 1

最后发现最大是256。

小结:

  • ==比较操作符:用来比较两个对象是否相等,value做为判断因素;
  • is同一性运算符:比较判断两个对象是否相同,id做为判断因素。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python计算列表内各元素的个数实例
Jun 29 Python
Django进阶之CSRF的解决
Aug 01 Python
python动态进度条的实现代码
Jul 03 Python
python使用matplotlib绘制雷达图
Oct 18 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
python如何获取apk的packagename和activity
Jan 10 Python
Python如何定义接口和抽象类
Jul 28 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 Python
Python使用PIL模块生成随机验证码
Nov 21 #Python
Python3中条件控制、循环与函数的简易教程
Nov 21 #Python
Python3 循环语句(for、while、break、range等)
Nov 20 #Python
Python虚拟环境项目实例
Nov 20 #Python
Python插件virtualenv搭建虚拟环境
Nov 20 #Python
使用tensorflow实现AlexNet
Nov 20 #Python
Django在win10下的安装并创建工程
Nov 20 #Python
You might like
PHP安全性漫谈
2012/06/28 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
js实现动态时钟
2020/03/12 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python采集腾讯新闻实例
2014/07/10 Python
Python itertools模块详解
2015/05/09 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
Ajax的工作原理
2015/12/04 面试题
班级元旦晚会开幕词
2015/01/29 职场文书
会计求职简历自我评价
2015/03/10 职场文书
教师研修随笔感言
2015/11/18 职场文书