我有以下用于进行字符串比较的python代码:
>>> mf="moo foo"
>>> mf[0:3]
'moo'
>>> mf[0:3] is "moo"
False
>>> mf[0:3] == "moo"
True
>>> str(mf[0:3]) is "moo"
False
因此double equals运算符返回true,但python is
运算符返回false。这必须是因为它们不是同一个对象。
使用str[n:m]
获得的字符序列与同一字符串的文字表示('moofoo'
)之间的技术差异是什么?为什么他们不是同一个对象?
答案 0 :(得分:5)
is
测试相等性以及相同的对象ID(在CPython中,这是内存中对象的地址)。 str(...)
和切片创建一个浅拷贝,因此is
测试失败。
==
测试相等的值。 is
测试对象标识。
'is'允许我们在系统跟踪时进行区分 看起来很相似的两件事,或实际上是同一件事。