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

M W*_*ade 4 python

在 Python 中,内置常量 None 保证是单数。这种情况只有一个例子。

其他内置类型的情况并非如此。具有相同内容的字符串或数字并不唯一。两个字符串“a”和“a”不是唯一的,而是具有不同的实例。对于具有相同内部值的两个数字(例如 1.0 和 1.0)也是如此。

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

一个具体的例子是:

value = 1 == 1
Run Code Online (Sandbox Code Playgroud)

在这种情况下与?value相同的实例True

Kev*_*vin 5

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

然而,True == 1 and True is not 1。这是因为布尔值是 的子类int。布尔值永远不会与“常规”整数进行比较is,但与整数、浮点值和其他数字类型进行比较时会忽略类型差异,这是数字层次结构的标准行为。

* 小心更复杂的布尔表达式。特别是,and并且or始终返回其操作数之一,并且不强制为布尔值(除非它们的操作数已经是布尔值)。

(顺便说一句,除了TrueFalse、 和之外,Python 还包含另外两个单例,NoneEllipsisNotImplemented。每个类型对象也或多或少是唯一的;如果你写x = int; y = int,那么xy将与 进行比较is,因为只有一个对象代表该int类型。如果您正在创建自己的类型层次结构,并且希望避免让对象与其子类进行相等比较(就像布尔值与整数的比较一样),则可以使用此方法。在其他情况下,与isinstance()或相比,它具有边际效益issubclass(),后者更好地遵守里氏替换原则.)