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通过apply使用元祖和列表调用函数实例
May 26 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python 转义字符详细介绍
Mar 21 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python构建网页爬虫原理分析
Dec 19 Python
python实现媒体播放器功能
Feb 11 Python
使用requests库制作Python爬虫
Mar 25 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python Web框架之Django框架Form组件用法详解
Aug 16 Python
python实现门限回归方式
Feb 29 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 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
mysql5写入和读出乱码解决
2006/11/25 PHP
php入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
PHP 第三节 变量介绍
2012/04/28 PHP
关于Laravel-admin的基础用法总结和自定义model详解
2019/10/08 PHP
过虑特殊字符输入的js代码
2010/08/05 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
python有证书的加密解密实现方法
2014/11/19 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
对Python _取log的几种方式小结
2019/07/25 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
Django在Model保存前记录日志实例
2020/05/14 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
工程总经理工作职责
2013/12/09 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
文明班级建设方案
2014/05/15 职场文书
建筑结构施工求职信
2014/07/11 职场文书
领导班子四风表现材料
2014/08/23 职场文书
信用卡工资证明格式
2014/09/13 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
打架检讨书范文
2015/01/27 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript