【发布时间】:2017-07-21 05:18:33
【问题描述】:
我不认为这是重复的,因为我在比较类型的特定情况中询问is vs ==,但请告诉我,我会删除问题。
我知道 python 中的is 操作符确实转换为id(type(a))==id(<type>);但到目前为止,我发现type(a) is <type> 似乎给出了可预测的结果。我的问题是,使用is 运算符会产生意想不到的结果(即类似'foo' is str 返回False)?或者python是否将type类存储在可预测的位置,以便is总是给出与==相同的结果?我发现is 在这种情况下更具可读性。
注意这种情况是如果我不处理继承的类/子类(在这种情况下isinstance 是合适的)。
【问题讨论】:
-
不要将
is视为id的比较。如果a和b是同一个对象,a is b的计算结果为True。如果这就是您要寻找的东西,请继续使用它。 -
尤其是内存位置是完全不相关的。在 CPython 以外的 Python 实现中,它们甚至可能在表达式中间发生变化(尽管
id值不会)。 -
@user2357112 抱歉,我在多个 stackoverflow 线程中听到了这种解释;我想只有在有限的情况下,这些操作是等价的。
-
一个类也是
type类型的对象。在 Python 中——一切都是对象——所以我认为它应该是安全的。 -
好吧,如果上下文是 CPython,那是有效的,尽管它是一个实现细节(不太可能改变,但你仍然不应该依赖它)。
标签: python python-3.x class types subclass