在 Python 的世界里,==和 is 这两个操作符常常让初学者感到困惑。它们外表相似,却有着截然不同的底层逻辑。理解它们的区别,不仅能避免潜在的 Bug,还能写出更地道的代码。
1. ==与 is的本质区别
==和 is在 Python 中扮演着完全不同的角色:
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 is b)
c =
d =
(c d)


