Python中"is"和"=="有什么区别?

5 投票
2 回答
3291 浏览
提问于 2025-04-15 15:26

可能重复的问题:
Python中的‘==’和‘is’比较字符串时,‘is’有时会失败,为什么?

‘is’

a == b

a is b

是一样的吗?

如果不是,那有什么区别呢?

编辑:
为什么

a = 1
a is 1

返回True,而

a = 100.5
a is 100.5

返回False呢?

2 个回答

5

如上面已经非常清楚地解释过了。

is : 用于判断两个对象是否是同一个(完全相同的对象)

== : 用于判断两个值是否相等(值相同但不一定是同一个对象)

另外要记住,Python 会使用字符串驻留(这是一种优化方式),所以你可能会遇到一些奇怪的副作用:

>>> a = "test"
>>> b = "test"
>>> a is b
True
>>> "test_string" is "test" + "_" + "string"
True

>>> a = 5; b = 6; c = 5; d = a
>>> d is a
True  # --> expected
>>> b is a
False # --> expected
>>> c is a
True  # --> unexpected
13

不,这两个是不同的。is 是用来检查对象是否相同的,也就是说,它是在检查 ab 是否是完全一样的对象。举个例子:

a = 100.5
a is 100.5  # => False
a == 100.5  # => True

a = [1,2,3]
b = [1,2,3]
a == b  # => True
a is b  # => False
a = b
a == b  # => True
a is b  # => True, because if we change a, b changes too.

所以,如果你想比较两个对象是否代表同样的东西,就用 ==(这是最常见的用法);如果你想确认这两个对象在内存中是完全相同的(你会知道什么时候需要这种比较)。

另外,你可以通过 __eq__ 操作符来重载 ==,但 is 是不能重载的。

撰写回答