聊聊Python中的is和==
首先,Python中的is就是判断地址是否相等(相当于Java中的==),Python中的==就是判断数值是否相等(相当于Java中的equals)。
看个简单的例子:
a = [1, 2, 3]
b = [1, 2, 3]
id(a)
Out[16]: 2531065911112
id(b)
Out[17]: 2531064874824
a == b
Out[18]: True
a is b
Out[19]: False
因为地址不同,但是元素是相同的。
但是会发现一些好玩的东西,比如:
a = 100
b = 100
id(a)
Out[22]: 140720205396832
id(b)
Out[23]: 140720205396832
a == b
Out[24]: True
a is b
Out[25]: True
a = 10000
b = 10000
id(a)
Out[29]: 2531066740880
id(b)
Out[30]: 2531066741104
a == b
Out[31]: True
a is b
Out[32]: False
我们发现上面两个结果竟然不同,怎么回事呢?
原来是因为Python中整型的复用机制:
在python的整型对象中,将-5~256(python源码中定义)这些整数对象放于小整数对象池中缓存。
python中除上述的小整数外其他称为大整数,创建时为其分配空间。
但创建两个相同的大整数时,会为其分配不同的地址空间。
同理针对字符串:
a = 'chenchi'
b = 'chenchi'
id(a)
Out[35]: 2531066870728
id(b)
Out[36]: 2531066870728
a == b
Out[37]: True
a is b
Out[38]: True
在创建字符串时,python会根据字符串长度判断是否创建字符串对象。在WIN32平台上,最大为2147483647,即2GB,大于该值不会创建字符串对象。
python字符串对象中,存在intern机制,即共享机制。对于空字符串,python只会在第一次使用时创建,后面使用时只会返回原来创建的对象(类似单例模式)。
对于应用了intern机制的字符串对象,会直接返回对象的引用。实际使用中,创建两个相同的字符串变量时,地址是相同的。
参考
https://blog.csdn.net/qq_33512078/article/details/78357773
聊聊Python中的is和==的更多相关文章
- 聊聊Python中的闭包和装饰器
1. 闭包 首先我们明确一下函数的引用,如下所示: def test1(): print("--- in test1 func----") # 调用函数 test1() # 引用函 ...
- 聊聊Python中的生成器和迭代器
Python中有两个重要的概念,生成器和迭代器,这里详细记录一下. 1. 生成器 什么是生成器呢? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...
- 聊聊Python中的多进程和多线程
今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...
- 聊聊Python中的GIL
对于广大写Python的人来说,GIL(Global Interpreter Lock, 全局解释器锁)肯定不陌生,但未必清楚GIL的历史和全貌是怎样的,今天我们就来梳理一下GIL. 1. 什么是GI ...
- 聊聊Python中的描述符
描述符是实现描述符协议方法的Python对象,当将其作为其他对象的属性进行访问时,该描述符使您能够创建具有特殊行为的对象. 通常,描述符是具有“绑定行为”的对象属性,其属性访问已被描述符协议中的方法所 ...
- Python中的多线程编程,线程安全与锁(一)
1. 多线程编程与线程安全相关重要概念 在我的上篇博文 聊聊Python中的GIL 中,我们熟悉了几个特别重要的概念:GIL,线程,进程, 线程安全,原子操作. 以下是简单回顾,详细介绍请直接看聊聊P ...
- 最全总结 | 聊聊 Python 办公自动化之 Excel(中)
1. 前言 上一篇文章中,我们聊到使用 xlrd.xlwt.xlutils 这一组合操作 Excel 的方法 最全总结 | 聊聊 Python 办公自动化之 Excel(上) 本篇文章将继续聊另外一 ...
- 最全总结 | 聊聊 Python 办公自动化之 Word(中)
1. 前言 上一篇文章,对 Word 写入数据的一些常见操作进行了总结 最全总结 | 聊聊 Python 办公自动化之 Word(上) 相比写入数据,读取数据同样很实用! 本篇文章,将谈谈如何全面读取 ...
- 最全总结 | 聊聊 Python 办公自动化之 PPT(中)
1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...
随机推荐
- c#获取程序版本号
Content.Text = "程序集版本:" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Vers ...
- 论文--Topic-Sensitive PageRank
背景 原有的PageRank方法:通过web上链接结构信息得到页面之间相对的重要性,和特定的查询内容无关 论文涉及到的其他算法 HITS Hilltop,处理常见的流行查询 popular query ...
- WebSocket协议解析
WebSocket协议解析 转载请注明出处:WebSocket解析 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HTTP请求,然后由服 ...
- AGC027 A - Candy Distribution Again
目录 题目链接 题解 代码 题目链接 AGC027 A - Candy Distribution Again 题解 贪心即可 代码 #include<cstdio> #include< ...
- pojA Star not a Tree?
题目链接 pojA Star not a Tree? 题解 啊,模拟退火是个好东西 模拟退火即可 代码 #include<cmath> #include<cstdio> #in ...
- Android MediaCodec的数据处理方式分析
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...
- Adding Digital control to Dual tracking LM317 / LM337 Bench supply
Adding Digital control to Dual tracking LM317 / LM337 Bench supply I've been working on my own idea ...
- 设置Tab键缩进2字符
默认是1.74cm,是1.5字符. 论文是4个空格显示为4个点,或者全角下2个空格,显示为2个空格框.看上方的首航缩进标志是否在2. 看图 在段落 格式里面进行设置! 点上图的制表位 打开下图 选默认 ...
- Git -- 本地 一个相同的新的分支 并 推送到远程仓库
(一).创建本地分支 git checkout -b 新分支名 执行该指令后,会在本地创建一个新分支,该分支是从当前分支上检出的,所以所有文件内容都和当前分支一模一样,这是正常的.创建成功后,将自动切 ...
- C# Round源码
在日常开发中经常遇到四舍五入的情况比如 Math.Round(1.25, 1),首先我们要知道这里的Round 其实是银行家算法,具体可以参考Round() 四舍五入 js银行家算法 那么C#是如何实 ...