在Python中,内置常量None保证是单数。它只有一个例子。
其他内置类型不是这种情况。具有相同内容的字符串或数字不是唯一的。两个字符串“a”和“a”不是唯一的,但具有不同的实例。两个内部值相同的数字也是如此,比如说1.0和1.0。
内置布尔常量True和False是否像None一样唯一,或者它们是否有不同的实例?
一个具体的例子是:
value = 1 == 1
在这种情况下,与value
的{{1}}实例相同?
答案 0 :(得分:3)
常量True
和False
是唯一的,作为规范guarantees they are the only instances of bool
。也就是说,如果您有两个用True
初始化的变量或一个真正的布尔表达式,例如1 == 1
,*那么它们将与is
进行比较。 False
也是如此。
然而,True == 1 and True is not 1
。这是因为布尔值是int
的子类。布尔值永远不会与带有is
的“常规”整数进行比较,但是与整数,浮点值和其他数字类型进行比较时,类型差异将被忽略,numeric hierarchy的标准行为也是如此。
*注意更精细的布尔表达式。特别是,and
和or
总是返回其中一个操作数,并且不强制转换为布尔值(除非它们的操作数已经是布尔值)。
(顺便提一下,除了True
,False
和None
之外,Python还包含其他两个单例,即Ellipsis
and NotImplemented
。每个类型对象也或多或少都是唯一的;如果您写x = int; y = int
,则x
和y
将与is
进行比较,因为只有一个对象代表int
类型。如果您正在创建自己的类型层次结构并希望避免将对象与其子类进行比较(如布尔值与整数相比),则可以使用。在其他情况下,与isinstance()
或issubclass()
相比,它具有边际效益,哪个更好地尊重Liskov substitution principle。)