欢迎来到 CILMY23 的博客

🏆本篇主题为: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编程的基础,也是面试中的高频考点。希望这篇博客能帮助大家更好地理解这个概念!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐