Python中只有一个True和一个False对象吗?
我知道在Python中,NoneType
只有一个实例,就是None
对象,所以你可以放心地用is None
来检查某个东西是否等于None
。
那么,对于bool
中的True
和False
,是否也有类似的保证(即每个值只有一个实例)呢?
如果没有,那为什么呢?
编辑:特别是,我注意到(n+0) is (0+n)
在n
的范围是-5
到257
时返回True
,而其他情况下返回False
。换句话说,零、前256个正整数和前5个负整数似乎是预先缓存的,没有再次实例化。我猜这可能是解释器(在我这里是CPython)做出的选择,而不是语言的规定。而且bool
是从int
派生的,所以我仍然在想,其他解释器会有什么样的表现。
编辑:为了澄清,因为这似乎引起了很多混淆,我的意图并不是测试一个值的布尔解释。为了这个目的,我绝对不会使用is True
或is False
。我的目的是能够区分False
和其他所有值,尤其是在一个变量中,这个变量可以有多种类型的值,包括空字符串、零和None
,同样的道理也适用于True
。我自己是一个经验丰富的程序员,看到“if booleanvar == True”时会感到不适。
关于重复问题的说明:这个问题被认为是重复的那些问题(这个和这个)并没有回答这个问题;它们只是说明bool
是int
的一个子类,主要在于它们的repr
不同,而不是True
和False
是否被保证是唯一的。
另外,请注意,这个问题不是关于名称True
和False
绑定到什么,而是关于实例的bool
类。
2 个回答
bool
类型只有两个值,分别是 True
(真)和 False
(假)。而且,它不能被继承,也就是说你不能创建一个新的类来增加其他的值。
虽然这个规则是确定的,但实际上很少有必要去依赖它。通常你应该用 if x
来判断,而不是 if x is True
,也要避免需要区分 True
和其他“真”的值,或者 False
和其他“假”的值的情况。
根据文档(https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy):
布尔值
布尔值用来表示真假,分别是 False(假)和 True(真)。这两个代表 False 和 True 的对象就是唯一的布尔对象。
总共有这两个对象,任何计算得到布尔值的结果都会是这两个对象中的一个:
>>> (1 == 1) is True
True
>>> (1 == 0) is False
True