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

在Python中,内置常量True和False是唯一的吗?,python,Python,在Python中,内置常量None保证为单数。只有一个例子 对于其他内置类型,情况并非如此。具有相同内容的字符串或数字不是唯一的。两个字符串“a”和“a”不是唯一的,但具有不同的实例。这同样适用于具有相同内部值的两个数字,例如1.0和1.0 内置布尔常量True和False是否与None一样唯一,或者它们有不同的实例 一个具体的例子是: value = 1 == 1 在这种情况下,value是否与True的实例相同 常量True和False作为规范是唯一的。也就是说,如果有两个变量都是用Tru

在Python中,内置常量None保证为单数。只有一个例子

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

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

一个具体的例子是:

value = 1 == 1

在这种情况下,
value
是否与
True
的实例相同

常量
True
False
作为规范是唯一的。也就是说,如果有两个变量都是用
True
初始化的,或者是一个真正的布尔表达式,例如
1==1
,*那么它们将与
is
进行相同的比较。
False
也是如此

但是,
True==1,True不是1
。这是因为布尔是
int
的一个子类。布尔值永远不会与具有
is
的“常规”整数进行相同的比较,但与整数、浮点值和其他数字类型进行比较时,会忽略类型差异,这是的标准行为

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


(顺便说一句,Python除了
True
False
None
,还包含另外两个单例,即每个类型对象或多或少都是唯一的;如果您编写
x=int;y=int
,那么
x
y
将与
is
比较,因为只有一个对象表示
int
类型的对象。如果您正在创建自己的类型层次结构,并且希望避免将对象与它们的子类(如布尔值与整数)进行比较,则可以使用此选项。在其他情况下,与更尊重

“值False和True将是单例的,就像None一样。”您可以使用来解决这些问题。查看
id(True)
id(1==1)
@PatrickHaugh这永远不足以回答这样的问题。你不想知道它们是否可以相同,你想知道它们是否保证相同。它们不是隐式转换的,它们实际上是整数,因为
bool
int
@MarkRansom的子类:这不是它在中所说的。当然,我认为这在2.7中是正确的。从您的链接:“布尔类型是整数类型的子类型”。@MarkRansom:Edited,它们在类型层次结构中的缩进令人困惑。在Python 3.6中,
issubclass(bool,int)
返回
true