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装饰器 免去调用父类构造函数的麻烦
May 18 Python
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
python中requests库session对象的妙用详解
Oct 30 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
Python实现识别手写数字大纲
Jan 29 Python
Python中常用的8种字符串操作方法
May 06 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
详解python中docx库的安装过程
Nov 08 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
Python可视化神器pyecharts绘制水球图
Jul 07 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
PHP闭包函数详解
2016/02/13 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Django获取应用下的所有models的例子
2019/08/30 Python
python plotly画柱状图代码实例
2019/12/13 Python
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
讲解员培训方案
2014/05/04 职场文书
本科应届生自荐信
2014/06/29 职场文书
颐和园导游词
2015/01/30 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
python随机打印成绩排名表
2021/06/23 Python
python全面解析接口返回数据
2022/02/12 Python
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS