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编程中对super函数的正确理解和用法解析
Jul 02 Python
python读出当前时间精度到秒的代码
Jul 05 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
Pandas读取csv时如何设置列名
Jun 02 Python
什么是Python中的匿名函数
Jun 02 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
Python容器类型公共方法总结
Aug 19 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 Python
python的html标准库
Apr 29 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
《忧国的莫里亚蒂》先导宣传图与STAFF公开
2020/03/04 日漫
PHP&MYSQL服务器配置说明
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
javascript之Partial Application学习
2013/01/10 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
vuejs指令详解
2017/02/07 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
详解Python中的条件判断语句
2015/05/14 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python 列表理解及使用方法
2017/10/27 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
2018/05/07 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
护士自荐信
2013/10/25 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
对公司合理化的建议书
2014/03/12 职场文书
意向书范文
2014/03/31 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
安全宣传标语
2014/06/10 职场文书
学校班班通实施方案
2014/06/11 职场文书
地理科学专业自荐信
2014/09/01 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
酒会邀请函
2015/01/31 职场文书
实施意见格式范本
2015/06/05 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
java版 联机五子棋游戏
2022/05/04 Java/Android