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(obj)是否相同)。
2. is 判断对象身份:常见陷阱
列表对象的身份
即使内容相同,每次创建列表都会生成新对象。
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 is list2) # False,不同对象
print(list1 is list3) # True,同一对象
小整数常量池
Python 为了优化性能,会缓存 -5 到 256 之间的整数。
a = 256
b = 256
print(a is b)
c =
d =
(c d)


