Python中是否只有一个True和一个False对象?

Python中是否只有一个True和一个False对象?,python,object,boolean,instance,Python,Object,Boolean,Instance,我知道Python保证只有一个NoneType实例,即None对象,这样您就可以安全地使用is None来测试某个对象是否等于None 对于boolTrue和False是否有同等的保证(即每种情况只有一个实例) 若否,原因为何 编辑:特别是,我注意到(n+0)是(0+n)为范围(-5257)中的n提供真,反之则提供假。换句话说,零、前256个正整数和前5个负整数似乎是预缓存的,不会再次实例化。我猜这是解释器的选择(在我的例子中是CPython),而不是语言的规范。而bool源于int,所以我仍然

我知道Python保证只有一个
NoneType
实例,即
None
对象,这样您就可以安全地使用
is None
来测试某个对象是否等于
None

对于
bool
True
False
是否有同等的保证(即每种情况只有一个实例)

若否,原因为何

编辑:特别是,我注意到
(n+0)是(0+n)
范围(-5257)
中的n提供
,反之则提供
。换句话说,零、前256个正整数和前5个负整数似乎是预缓存的,不会再次实例化。我猜这是解释器的选择(在我的例子中是CPython),而不是语言的规范。而
bool
源于
int
,所以我仍然想知道我对其他口译员有什么期望

编辑:澄清一下,因为这似乎产生了很多混乱,我的目的不是测试值的布尔解释。因此,我永远不会使用
为真
为假
。我的目的是能够在一个变量中区分
False
,该变量可以有多种类型的值,包括空字符串、零和
None
,对于
True
,也同样如此。我自己是一个经验丰富的程序员,当我看到“if booleanvar==True”时,我会畏缩

关于重复的注意事项:这个问题被认为是(和)的重复,但没有回答这个问题;他们只是声明
bool
int
的一个子类,主要不同于
repr
,如果
True
False
保证是唯一的,则不在此限


另外,请注意,这不是关于
True
False
的名称绑定到什么的问题,而是关于类
bool
的实例的问题,
bool
类型只有两个实例,
True
False
。此外,它不能被子类化,因此无法创建一个可以有额外实例的派生类

但即使它是有保证的,也很少有好的理由去依赖它。如果x为真,通常应使用
,而不是
,并避免出现需要将
与其他真实值或
与其他虚假值区分开来的情况。

来自文档():

布尔人

这些代表了真值False和True。表示值False和True的两个对象是唯一的布尔对象

只有两个对象,任何产生布尔值的计算都将产生这两个现有对象中的一个:

>>> (1 == 1) is True
True
>>> (1 == 0) is False
True

你为什么需要/想要这样做?类似于
如果var为真:
如果var:
相比是丑陋的。一般来说:不要针对
进行测试。请改用表达式的隐式布尔值。1。这取决于Python的哪个版本;二,。千万不要依赖于此(如果问候语:
,则回答“是:
”;如果问候语==True:
,则回答“否:
”;如果问候语为True:
,则回答“更糟:
”)@PedroGimeno:我强烈建议你不要使用
is True
is False
但是。如果某些东西:
你应该使用
,而不是测试True或False。如果你必须使用布尔值,最好使用
isinstance(object,bool)
。但是,内置名称
True
False
是单例。但有时您通过执行计算生成实例;例如
(917+543)是(916+544)
给出了
False
。那么我是否可以保证,如果我给出的是False或True,我就不会有新的实例?从你的回答来看这并不清楚。@PedroGimeno你在比较两个整数,并问它们是否是相同的引用。这与你问题中的布尔无关。不过,如果你在这些整数上调用bool,你会得到你体验到的结果。@PedroGimenot、 布尔(917+543)是布尔(916+544)
True
@JoshSmeaton:我的问题是关于实例的。对于
is
,我问它们是否是同一个实例。我使用
int
示例是因为
bool
int
的一个子类。请查看我问题的最新编辑。谢谢,这正是我所寻找的答案,得到了一位专家的支持规范性来源。