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中正则表达式的使用详解
Oct 17 Python
详解Python中DOM方法的动态性
Apr 11 Python
深入理解Django的中间件middleware
Mar 14 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
python实现学员管理系统
Feb 26 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
Tensorflow 实现分批量读取数据
Jan 04 Python
学习Python列表的基础知识汇总
Mar 10 Python
jupyter note 实现将数据保存为word
Apr 14 Python
Python-openCV开运算实例
Jul 05 Python
Visual Studio code 配置Python开发环境
Sep 11 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与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
php 字符串替换的方法
2012/01/10 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
javascript Window及document对象详细整理
2011/01/12 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
基于hashlib模块--加密(详解)
2017/06/21 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python批量赋值操作实例
2018/10/22 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
导致python中import错误的原因是什么
2020/07/01 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
一体化教学实施方案
2014/05/10 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
终止劳动合同协议书
2014/10/05 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
合作协议书格式范本
2016/03/21 职场文书