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读写文件操作示例程序
Dec 02 Python
python实现文本文件合并
Dec 29 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
对numpy中向量式三目运算符详解
Oct 31 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
python根据时间获取周数代码实例
Sep 30 Python
python返回数组的索引实例
Nov 28 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
Python zip函数打包元素实例解析
Dec 11 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
AI:如何训练机器学习的模型
Apr 16 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
php时间计算相关问题小结
2016/05/09 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
使用jQuery UI的tooltip函数修饰title属性的气泡悬浮框
2013/06/24 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
Angular使用Md5加密的解决方法
2017/09/16 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
利用python如何处理nc数据详解
2018/05/23 Python
对python模块中多个类的用法详解
2019/01/10 Python
python实现图片插入文字
2019/11/26 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
先进工作者事迹材料
2014/12/23 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书