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基于Tkinter实现的记事本实例
Jun 17 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python iter()函数用法实例分析
Mar 17 Python
java中两个byte数组实现合并的示例
May 09 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
Jupyter notebook如何修改平台字体
May 13 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
如何解决.cuda()加载用时很长的问题
May 24 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手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
详解JavaScript原型与原型链
2020/11/16 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
django form和field具体方法和属性说明
2020/07/09 Python
Python 图片处理库exifread详解
2021/02/25 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
消防器材管理制度
2014/01/28 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
校园文明倡议书
2014/05/16 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
2015年党性分析材料
2014/12/19 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android
golang中字符串MD5生成方式总结
2021/07/04 Golang
vue实现在data里引入相对路径
2022/06/05 Vue.js