Python:some_string [0:3]的类型是什么?

时间:2013-07-25 05:13:28

标签: python

我有以下用于进行字符串比较的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')之间的技术差异是什么?为什么他们不是同一个对象?

1 个答案:

答案 0 :(得分:5)

is测试相等性以及相同的对象ID(在CPython中,这是内存中对象的地址)。 str(...)和切片创建一个浅拷贝,因此is测试失败。

==测试相等的值。 is测试对象标识。

引自Python's Mailing List

  

'is'允许我们在系统跟踪时进行区分   看起来很相似的两件事,或实际上是同一件事。