首先,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和==的更多相关文章

  1. 聊聊Python中的闭包和装饰器

    1. 闭包 首先我们明确一下函数的引用,如下所示: def test1(): print("--- in test1 func----") # 调用函数 test1() # 引用函 ...

  2. 聊聊Python中的生成器和迭代器

    Python中有两个重要的概念,生成器和迭代器,这里详细记录一下. 1. 生成器 什么是生成器呢? 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包 ...

  3. 聊聊Python中的多进程和多线程

    今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...

  4. 聊聊Python中的GIL

    对于广大写Python的人来说,GIL(Global Interpreter Lock, 全局解释器锁)肯定不陌生,但未必清楚GIL的历史和全貌是怎样的,今天我们就来梳理一下GIL. 1. 什么是GI ...

  5. 聊聊Python中的描述符

    描述符是实现描述符协议方法的Python对象,当将其作为其他对象的属性进行访问时,该描述符使您能够创建具有特殊行为的对象. 通常,描述符是具有“绑定行为”的对象属性,其属性访问已被描述符协议中的方法所 ...

  6. Python中的多线程编程,线程安全与锁(一)

    1. 多线程编程与线程安全相关重要概念 在我的上篇博文 聊聊Python中的GIL 中,我们熟悉了几个特别重要的概念:GIL,线程,进程, 线程安全,原子操作. 以下是简单回顾,详细介绍请直接看聊聊P ...

  7. 最全总结 | 聊聊 Python 办公自动化之 Excel(中)

    1. 前言 上一篇文章中,我们聊到使用 xlrd.xlwt.xlutils 这一组合操作 Excel 的方法 最全总结 | 聊聊 Python 办公自动化之 Excel(上) ​本篇文章将继续聊另外一 ...

  8. 最全总结 | 聊聊 Python 办公自动化之 Word(中)

    1. 前言 上一篇文章,对 Word 写入数据的一些常见操作进行了总结 最全总结 | 聊聊 Python 办公自动化之 Word(上) 相比写入数据,读取数据同样很实用! 本篇文章,将谈谈如何全面读取 ...

  9. 最全总结 | 聊聊 Python 办公自动化之 PPT(中)

    1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 python-pptx 这个依赖库完成对 PPT 文档最基本的操作 最全总结 | 聊聊 Python 办公自动化之 PPT(上) 作为 ...

随机推荐

  1. 洛谷.3391.[模板]文艺平衡树(Splay)

    题目链接 //注意建树 #include<cstdio> #include<algorithm> const int N=1e5+5; //using std::swap; i ...

  2. 在Editplus直接运行程序的步骤

    https://www.cnblogs.com/myitroad/p/4841875.html

  3. java.lang.IllegalStateException: Illegal access

    http://blog.csdn.net/weigao_easy/article/details/51833470 http://blog.csdn.net/tzh476/article/detail ...

  4. Spark Client启动原理探索

    经过几天闲暇时间的学习,终于又理解的深入了一些,关于Spark Client如何提交作业也更清晰了点. 在整体的流程图上是这样的: 大体的思路就是应用程序通过SparkSubmit提交程序后,自动在当 ...

  5. Zookeeper学习笔记——2 Shell和Java API的使用

    ZooKeeper的使用一般都接触不到,因为平时工作甚少直接使用ZK.但是通过手动操作一下ZK,还是能对其中的门道了解各一二. shell 常用命令 help 查看所有支持的命令 [zk: local ...

  6. pycharm如何设置python版本、设置国内pip镜像、添加第三方类库

    直接上图(mac环境): 一.设置项目的python版本 File->Default Settings ... 在弹出的界面上(参考下图),左上角的下拉框里,选择python解释器的版本即可(建 ...

  7. 阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结

    2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner ...

  8. MSSQL存储过程

    存储过程的种类:       1.系统存储过程.        以sp_开头      2.扩展存储过程.        以xp_开头      3.用户定义存储过程. --重新编译存储过程 exec ...

  9. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  10. postgresql ltree类型

    最近一个月使用Postgresql的时候,经常遇到ltree的数据,感觉有些别扭,可是有绕不过去.今天决心整理一下,以后使用方便一些. 一.简介 ltree是Postgresql的一个扩展类型,由两位 ...