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

4 投票
2 回答
1415 浏览
提问于 2025-04-18 13:58

我知道在Python中,NoneType只有一个实例,就是None对象,所以你可以放心地用is None来检查某个东西是否等于None

那么,对于bool中的TrueFalse,是否也有类似的保证(即每个值只有一个实例)呢?

如果没有,那为什么呢?

编辑:特别是,我注意到(n+0) is (0+n)n的范围是-5257时返回True,而其他情况下返回False。换句话说,零、前256个正整数和前5个负整数似乎是预先缓存的,没有再次实例化。我猜这可能是解释器(在我这里是CPython)做出的选择,而不是语言的规定。而且bool是从int派生的,所以我仍然在想,其他解释器会有什么样的表现。

编辑:为了澄清,因为这似乎引起了很多混淆,我的意图并不是测试一个值的布尔解释。为了这个目的,我绝对不会使用is Trueis False。我的目的是能够区分False和其他所有值,尤其是在一个变量中,这个变量可以有多种类型的值,包括空字符串、零和None,同样的道理也适用于True。我自己是一个经验丰富的程序员,看到“if booleanvar == True”时会感到不适。

关于重复问题的说明:这个问题被认为是重复的那些问题(这个这个)并没有回答这个问题;它们只是说明boolint的一个子类,主要在于它们的repr不同,而不是TrueFalse是否被保证是唯一的。

另外,请注意,这个问题不是关于名称TrueFalse绑定到什么,而是关于实例bool类。

2 个回答

1

bool类型只有两个值,分别是 True(真)和 False(假)。而且,它不能被继承,也就是说你不能创建一个新的类来增加其他的值。

虽然这个规则是确定的,但实际上很少有必要去依赖它。通常你应该用 if x 来判断,而不是 if x is True,也要避免需要区分 True 和其他“真”的值,或者 False 和其他“假”的值的情况。

9

根据文档(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

撰写回答