Python 与x27之间的差异;是';和'==';

Python 与x27之间的差异;是';和'==';,python,Python,可能重复: 这真是一个很简单的问题 这两者之间有什么区别 if a.b is 'something': 及 请原谅我的无知第一个检查身份,第二个检查平等 示例: 根据这些项目(即字符串)在内存中的存储位置,使用的第一个操作是可能会导致为真 a='this is a very long string' b='this is a very long string' a is b False 选中后,将显示它们存储在不同的位置 id(a) 62751232 id(b) 62664432 第

可能重复:

这真是一个很简单的问题

这两者之间有什么区别

if a.b is 'something':

请原谅我的无知

第一个检查身份,第二个检查平等

示例:

根据这些项目(即字符串)在内存中的存储位置,使用
的第一个操作是
可能会导致
为真

a='this is a very long string'
b='this is a very long string'

a is b
False
选中后,将显示它们存储在不同的位置

id(a)
62751232

id(b)
62664432
第二个操作(
=
)将给出
True
,因为字符串相等

a == b
True
另一个显示<代码>为
的示例可以是<代码>真
或<代码>假(与第一个示例相比),但
==
的工作方式与我们预期的相同:

'3' is '3'
True
这意味着这两个短文本都存储在同一个内存位置,不同于上面示例中的两个较长字符串

'3' == '3'
True
这并不奇怪,这正是我们所期望的


我相信
is
用于确定是否引用了内存中的相同对象(有关更多详细信息,请参见下面的@SvenMarnach注释)

a是b
如果
a和
b
是相同的对象,则
为真。它们可以比较相等,但可以是不同的对象,例如:

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

当你意识到一个问题很简单时,很可能已经有了答案,所以…“我相信is使用id()来确定是否引用了内存中的相同对象。”不完全是--
is
只是比较指针。在CPython实现中,
id()
将指针作为整数返回,因此这将是等效的。@SvenMarnach谢谢Sven,我将更新我的答案以指向您的评论。我只在
中使用过
is
,如果a.b是None
上下文。您可以使用它的任何其他示例(例如,您会使用它来比较对象实例吗?)对不起,我从副本中得到了我的答案:)
>>> a = [1, 2]
>>> b = [1, 2]
>>> c = b
>>> a is b
False
>>> a is c
False
>>> b is c
True
>>> a == b == c
True