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

bod*_*ydo 10 python

is操作员如何确定两个对象是否相同?它是如何工作的?我找不到记录.

msw*_*msw 13

比较运算符

是通过比较引用的对象来查看操作数是否指向同一个对象.

>>> a = [1, 2]
>>> b = a
>>> a is b
True
>>> c = [1, 2]
>>> a is c
False
Run Code Online (Sandbox Code Playgroud)

c因为关系是假的,a所以列表不一样is.

  • 但!请注意,对于某些不可变对象,此*可以*不同.例如,a = 5; b = 5; 这个版本的Python,a is b在这台笔记本电脑上返回True.您不能保证两个对象只是因为它们是单独初始化而不同. (4认同)

dan*_*ben 12

文档:

每个对象都有一个标识,一个类型和一个值.对象的标识一旦创建就永远不会改变; 您可能会将其视为内存中对象的地址.'is'运算符比较两个对象的身份; id()函数返回一个表示其身份的整数(当前实现为其地址).

这似乎表明它比较了参数的内存地址,尽管它说"你可能认为它是内存中对象的地址"这一事实可能表明特定的实现没有得到保证; 只有语义.


小智 6

要添加到其他答案,您可以将其a is b视为is_(a, b):

def is_(a, b):
  return id(a) == id(b)
Run Code Online (Sandbox Code Playgroud)

需要注意的是,你不能直接替换 a is b使用id(a) == id(b),但上述功能避免了通过参数.

  • 刚刚偶然发现:您知道为什么直接替换不起作用,但通过函数可以吗? (2认同)