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中的引用和拷贝浅析
Nov 22 Python
Python中List.count()方法的使用教程
May 20 Python
Python正则表达式使用范例分享
Dec 04 Python
Python中turtle作图示例
Nov 15 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
Pytorch之contiguous的用法
Dec 31 Python
基于Pytorch SSD模型分析
Feb 18 Python
Python基于requests库爬取网站信息
Mar 02 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
python 定义函数 返回值只取其中一个的实现
May 21 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
如何设置mysql允许外网访问
2013/06/04 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
实例Python处理XML文件的方法
2015/08/31 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
Django在Model保存前记录日志实例
2020/05/14 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
对照检查剖析材料
2014/09/30 职场文书
地方课程教学计划
2015/01/19 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
担保贷款承诺书
2015/04/30 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS
python Tkinter模块使用方法详解
2022/04/07 Python
Python 统计序列中元素的出现频度
2022/04/26 Python