python 中 is和==的区别
一.is和==区别
- id() 我们可以使用id()查到一个变量表示的值在内存中的地址
1 2 3 4 5 6 7 8 9 | print ( id (s)) # 3212877232496 s = 'haha' print ( id (s)) # 3212877232496 lst = [ 1 , 2 , 4 ] print ( id (lst)) # 4326685768 lst1 = [ 1 , 2 , 4 ] print ( id (lst1)) # 4326684360 # 我们发现. 字符串的数据地址是⼀样的. ⽽ 列表的数据地址是不⼀样的. |
- ⼩数据池(常量池): 把我们使⽤过的值存储在⼩数据池中.供其他的变量使⽤. ⼩数据池给数字和字符串使⽤, 其他数据类型不存在. 对于数字: -5~256是会被加到⼩数据池中的. 每次使⽤都是同⼀个对象
- 对于字符串:
- 如果是纯⽂字信息和下划线. 那么这个对象会被添加到⼩数据池
- 如果是带有特殊字符的. 那么不会被添加到⼩数据池. 每次都是新的
- 如果是单⼀字⺟*n的情况. 'a'*20, 在20个单位内是可以的. 超过20个单位就不会添加 到⼩数据池中
- 注意(⼀般情况下): 在py⽂件中. 如果你只是单纯的定义⼀个字符串. 那么⼀般情况下都是会 被添加到⼩数据池中的. 我们可以这样认为: 在使⽤字符串的时候, python会帮我们把字符串 进⾏缓存, 在下次使⽤的时候直接指向这个字符串即可. 可以节省很多内存.
- is比较的就是id()计算出来的结果. 由于id是帮我 们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址. 最终我们通过is可以查看两个变量使⽤的是否是同⼀个对象.
-
== 双等表⽰的是判断是否相等, 注意. 这个双等比较的是具体的值.⽽不是内存地址
1 2 3 4 5 6 7 8 | s1 = "哈哈" s2 = "哈哈" print (s1 = = s2) # True print (s1 is s2) # True 原因是有⼩数据池的存在 导致两个变量指向的是同⼀个对象 l1 = [ 1 , 2 , 3 ] l2 = [ 1 , 2 , 3 ] print (l1 = = l2) # True, 值是⼀样的 print (l1 is l2) # False, 值是假的 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)