Python中运算符"=="和"is"的详解


Posted in Python onOctober 08, 2016

前言

在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和value(值)。is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

Python中比较两个对象是否相等,一共有两种方法,简单来说,它们的区别如下:

     is是比较两个引用是否指向了同一个对象(引用比较)。

     ==是比较两个对象是否相等。

>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True 
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True

实现原理

is比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同)。

==是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的__eq__函数来比较。(其实已知的对象应该也是通过内置的__eq__函数来比较的)。对于自定义的对象,如果实现了__eq__函数,就会使用它比较,如果没有实现,效果和==是一样的。

对象缓存机制

Python会对比较小的对象缓存,下次用到比较小的对象时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值。例子:

>>> c = 1
>>> d = 1
>>> print(c is d) 
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

通过计算得到的赋值,不会使用缓存区。从第一个代码示例中可以看出。

对于字符串,你可以通过使用intern函数强制使用缓存区。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
跟老齐学Python之??碌某?? target=
Sep 12 Python
决策树的python实现方法
Nov 18 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
python版简单工厂模式
Oct 16 Python
tensorflow 输出权重到csv或txt的实例
Jun 14 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
Python调用C语言程序方法解析
Jul 07 Python
python statsmodel的使用
Dec 21 Python
基于Python实现流星雨效果的绘制
Mar 18 Python
Python 爬虫多线程详解及实例代码
Oct 08 #Python
python字符串,数值计算
Oct 05 #Python
python制作企业邮箱的爆破脚本
Oct 05 #Python
python爬取NUS-WIDE数据库图片
Oct 05 #Python
python2.7的编码问题与解决方法
Oct 04 #Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 #Python
Python实现屏幕截图的代码及函数详解
Oct 01 #Python
You might like
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
Koa2 之文件上传下载的示例代码
2018/03/29 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
微信小程序实现多选删除列表数据功能示例
2019/01/15 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
公司领导推荐信
2013/11/12 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书