"
==
语法用于比较字符串对象的值,实际上是在String对象上运行__eq__
方法。
is
语法用于比较对象本身,而不是对象的值。当您切片一个字符串时,您正在创建一个新对象。
"
>>> print(id(s[3:]))
139911809265200
>>> print(id(s[3:]))
139911809262384
我不理解从id
函数返回的值发生了奇怪的事情。但是,这个id
问题是一个独立的问题,不会影响==
和is
语法的工作方式。
>>> (id(s[3:]), id(s[3:]), id(s[3:]), id(s[3:]))
(139911809265200, 139911809265200, 139911809265200, 139911809265200)
>>> (id(s[3:]), id(s[3:]), id(s[3:]), id(s[3:]))
(139911809262384, 139911809262384, 139911809262384, 139911809262384)
>>> (id(s[3:]), id(s[3:]), id(s[3:]), id(s[3:]))
(139911809265200, 139911809265200, 139911809265200, 139911809265200)
>>> (id(s[3:]), id(s[3:]), id(s[3:]), id(s[3:]))
(139911809262384, 139911809262384, 139911809262384, 139911809262384)
>>> a = id(s[3:])
>>> id(a)
139911809261520
>>> b = id(s[3:])
>>> id(b)
139911809261424
>>> c = id(s[3:])
>>> id(c)
139911809261360
>>> (id(a), id(b), id(c))
(139911809261520, 139911809261424, 139911809261360)
>>> (id(a), id(b), id(c))
(139911809261520, 139911809261424, 139911809261360)
>>> (id(s[3:]), id(s[3:]), id(s[3:]))
(139911809265200, 139911809265200, 139911809265200)
>>> (id(s[3:]), id(s[3:]), id(s[3:]))
(139911809263472, 139911809263472, 139911809263472)
>>> (id(s[3:]), id(s[3:]), id(s[3:]))
(139911809265200, 139911809265200, 139911809265200)