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