【一问专栏 】Python:is和==的区别详解
🏆本篇主题为:Python:is和==的区别详解
🏆个人主页:CILMY23-CSDN博客
🏆系列专栏:C++ | C语言 | Linux | Python | 数据结构和算法 | 算法专题
🏆感谢观看,支持的可以给个一键三连,点赞收藏+评论。如果你觉得有帮助,还可以点点关注
文章目录
前言
刚学 Python 的时候,你是不是也经常被“is 和 == 有什么区别?”这个问题困扰?无论是在入门教程、面试题还是日常编程中,它都经常出现。起初我也一头雾水,但一步步理解下来,才发现它其实并没那么复杂。今天,我就用一篇文章带大家彻底搞懂它!
什么是==(相等运算符)?
== 在python中用于比较两个对象的值是否相等,它关心的是对象的内容。我们通过几个例子来比较。
示例1:列表比较
a = ['C','I','L','M','Y']
b = ['C','I','L','M','Y']
print(a == b)
因为两个列表的内容相同,所以最后的结果是True
示例2:字符串比较
name1 = "CIlmy"
name2 = "CIlmy"
print(name1 == name2) # True - 因为字符串内容相同
示例3:数字比较
num1 = 23
num2 = 10 + 13
print(num1 == num2) # True - 因为数值相等
总结
所以其实python中的 == 就是在比较两个值,这和C/C++中的 == 有区别吗?
答案是还是有的,C/C++中会直接比较内存中的二进制数据(严格按比特位对比),这和python中还是有差距的。
什么是is(身份运算符)?
is用于比较两个对象是否是同一个对象,它关心的是对象在内存中的身份。
示例1:列表比较
a = ['C','I','L','M','Y']
b = ['C','I','L','M','Y']
c = a # c指向a的同一个对象
print(a is b) # False - 虽然是相同内容,但是不同对象
print(a is c) # True - 指向同一个对象
示例2:验证内存地址
print(id(a)) # 输出a的内存地址,比如140245...
print(id(b)) # 输出b的内存地址,与a不同
print(id(c)) # 输出c的内存地址,与a相同
总结
其实简单理解:is就像在问"这是同一个东西吗?",我可以用一个生活中的比喻来解释:
== 就像比较两本相同的书内容是否一样
is 就像比较这两本书是否是同一本实体书
即使两本书内容完全相同(==返回True),它们也是不同的实体书(is返回False)。
问题
Q1:什么情况下is和==会返回相同的结果?
a = [2, 3]
b = a # b指向a的同一个对象
print(a == b) # True
print(a is b) # True
当两个变量指向同一个对象时,两者都返回True。
Q2:为什么小字符串和小整数的is比较有时会返回True?
这是因为Python的优化机制:小整数(-5到256)会被缓存、短字符串会被驻留(intern)、这些都是为了提升性能
使用建议总结
| 场景 | 使用建议 | 示例 |
|---|---|---|
| 比较值是否相等 | 使用 == | if user_input == “quit”: |
| 检查是否为None | 使用 is | if result is None: |
| 检查是否是同一个对象 | 使用 is | if obj1 is obj2: |
| 布尔值比较 | 使用 == | if status == True: |
记忆技巧
==:看内容,双等号像两只眼睛在看内容
is:看身份,像在问"是这个吗?"
总结
==比较值,is比较对象身份、is相当于比较id(a) == id(b)、比较None时要用is
我认为掌握is和==的区别是Python编程的基础,也是面试中的高频考点。希望这篇博客能帮助大家更好地理解这个概念!
更多推荐



所有评论(0)