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 19 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
在python中将list分段并保存为array类型的方法
Jul 15 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 Python
python网络编程之五子棋游戏
May 14 Python
python实点云分割k-means(sklearn)详解
May 28 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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
重置版游戏视频
2020/04/09 魔兽争霸
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
Stop SQL Server
2007/06/21 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
详解Python爬虫的基本写法
2016/01/08 Python
pandas数值计算与排序方法
2018/04/12 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
python批量修改ssh密码的实现
2019/08/08 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
国税会议欢迎词
2014/01/16 职场文书
美术指导助理求职信
2014/04/20 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
体育运动会广播稿
2014/10/05 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python