Python中'is'运算符的语义是什么?

13 投票
3 回答
9963 浏览
提问于 2025-04-15 20:23

is 操作符是用来判断两个对象是否是同一个东西的。简单来说,它会检查这两个对象的内存地址,也就是它们在计算机里的存放位置。如果这两个对象的地址是一样的,说明它们是同一个对象;如果地址不同,那它们就是两个不同的对象。

3 个回答

7

补充一下其他答案的内容,你可以把 a is b 理解成 is_(a, b) 这个样子:

def is_(a, b):
  return id(a) == id(b)

需要注意的是,你不能直接把 a is b 替换成 id(a) == id(b),不过上面的函数通过参数避免了这个问题。

14

比较运算符

这个运算符的工作原理是比较两个对象,看看它们是否指向同一个东西。

>>> a = [1, 2]
>>> b = a
>>> a is b
True
>>> c = [1, 2]
>>> a is c
False

c 不是和 a 一样的列表,所以 is 的关系是假的。

14

根据文档的内容:

每个对象都有一个身份、一个类型和一个值。对象的身份一旦创建就不会改变;你可以把它想象成对象在内存中的地址。‘is’运算符用来比较两个对象的身份;而id()函数则返回一个整数,表示这个对象的身份(目前实现上是它的地址)。

这似乎说明它比较的是参数的内存地址,虽然文中提到“你可以把它想象成对象在内存中的地址”,这可能意味着具体的实现并不一定如此;只有它的含义是固定的。

撰写回答