在 Python 中,内置常量 True 和 False 是唯一的吗?



在Python中,内置常量None保证是单数的。它只有一个实例。

其他内置类型则不是这种情况。具有相同内容的字符串或数字不是唯一的。两个字符串"a"和"a"不是唯一的,但具有不同的实例。具有相同内部值的两个数字也是如此,例如 1.0 和 1.0。

内置的布尔常量 True 和 False 是否像 None 一样唯一,或者它们有不同的实例?

一个具体的例子是:

value = 1 == 1

在这种情况下,valueTrue相同的实例吗?

常量TrueFalse是唯一的,因为规范保证它们是bool的唯一实例。 也就是说,如果您有两个变量都使用True或真正的布尔表达式(如1 == 1,* )初始化,那么它们将与is相同。False也是如此。

但是,True == 1 and True is not 1. 这是因为布尔值是int的一个子类。 布尔值永远不会与具有is的"常规"整数进行比较,但在与整数、浮点值和其他数值类型进行比较时,将忽略类型差异,这是数值层次结构的标准行为。

* 小心使用更精细的布尔表达式。 特别是,andor总是返回它们的一个操作数,并且不强制使用布尔值(除非它们的操作数已经是布尔值)。

(顺便说一下,Python 除了TrueFalseNone之外,还包含另外两个单例,即EllipsisNotImplemented。 每个类型对象也或多或少是唯一的;如果你写x = int; y = int,那么xy将比较与is相同,因为只有一个对象表示int类型。 如果要创建自己的类型层次结构,并且希望避免对象像布尔值与整数一样与其子类进行比较,则可以使用此方法。 在其他情况下,与isinstance()issubclass()相比,它具有边际收益,后者更好地尊重了Liskov替代原则。

最新更新