【发布时间】:2019-08-18 09:16:39
【问题描述】:
is 运算符比较两个对象的内存地址,如果它们相同则返回True。那么,为什么它不能可靠地使用字符串呢?
代码 #1
>>> a = "poi"
>>> b = "poi"
>>> a is b
True
代码 #2
>>> ktr = "today is a fine day"
>>> ptr = "today is a fine day"
>>> ktr is ptr
False
我创建了两个内容相同但位于不同内存地址的字符串。为什么is算子的输出不一致?
【问题讨论】:
-
实际上你可能永远不会使用
is,除非你正在做一些相当复杂的事情。对于大多数相等比较,您可能需要==。 -
@dkamins:嗯,推荐的测试
None的方法使用'is':some_var is None(因为总是只有一个None实例) .我会说这是一个很常见的情况。 -
@voithos True - 我一直在使用它(和
is not None),甚至没有想到它!但除此之外...... -
@dkamins 它也常用于
True和False,因为它们也是单例。 -
@voithos 确实,但是我发现自己很少使用这些成语。
if something或if not something在我看来通常比if something is True或if something is False更清晰。