Python 中的 == 与 is:本质区别与最佳实践
在 Python 开发中,==和 is这两个操作符经常让开发者感到困惑。它们看起来相似,但底层逻辑完全不同。理解它们的差异对于编写健壮的代码至关重要。
1. ==与 is的本质区别
==是值比较,is是身份比较。这是最核心的区别。
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a == b) # True,内容相同
print(a is b) # True,引用同一对象
print(a == c) # True,内容相同
print(a is c) # False,不同对象
==:检查两个对象的值是否相等。底层调用的是对象的__eq__()方法。is:检查两个变量是否指向内存中的同一个对象(即 id 是否相同)。
2. is判断对象身份 - 常见陷阱
通过几个典型场景,我们可以更直观地理解 is 的行为。
案例 1:列表对象的身份
即使内容一样,新建的列表也是不同的对象。
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 is list2) # False - 不同对象
print(list1 is list3) # True - 同一对象
案例 2:小整数常量池
Python 为了优化性能,会缓存 -5 到 256 之间的整数。
a = 256
b = 256
print(a b)
c =
d =
(c d)


