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实现的中国剩余定理算法示例
Aug 05 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
10个Python小技巧你值得拥有
Sep 29 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
python绘制直方图和密度图的实例
Jul 08 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
python如果快速判断数字奇数偶数
Nov 13 Python
解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程
Mar 10 Python
python识别验证码的思路及解决方案
Sep 13 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
Python实现日志实时监测的示例详解
Apr 06 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程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Python3标准库总结
2019/02/19 Python
Python对象转换为json的方法步骤
2019/04/25 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
python requests库的使用
2021/01/06 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
Exception类的常用方法
2012/06/16 面试题
边城读书笔记
2015/06/29 职场文书
学术研讨会主持词
2015/07/04 职场文书
会议室管理制度范本
2015/08/06 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python