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