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 Django做网页
Nov 04 Python
使用python实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
Python多线程编程(五):死锁的形成
Apr 05 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python下Fabric的简单部署方法
Jul 14 Python
python字典操作实例详解
Nov 16 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
python处理document文档保留原样式
Sep 23 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
python中pdb模块实例用法
Jan 15 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 Python
 Python 中 logging 模块使用详情
Mar 03 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
利用python画出折线图
2018/07/26 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Python itertools.product方法代码实例
2020/03/27 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
python excel和yaml文件的读取封装
2021/01/12 Python
航空大学应届生求职信
2013/11/10 职场文书
建筑个人求职信范文
2014/01/25 职场文书
个人租房协议书
2014/04/09 职场文书
服务标兵事迹材料
2014/05/04 职场文书
金融专业求职信
2014/08/05 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL