为何Python中False == []返回False?bool([])结果为False
为什么
False == []返回False? 先看你的代码示例:
Python 3.10.6 (tags/v3.10.6:9c7b4bd, Aug 1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. print( False == []) False print (bool ([])) False print (bool (1)) True
问题核心要区分布尔上下文的隐式转换和直接相等性比较:
bool([])返回False,是因为Python判断对象布尔值时,会调用对象的__bool__(或__len__)方法。空列表的__len__返回0,所以在布尔上下文中被视为“假”,但这只是一种转换规则,不是说空列表本身等于布尔值False。==运算符做的是值相等性比较,Python对不同类型对象的相等性判断有明确规则:默认情况下,只有当两个对象是同一类型且内部值对应相等时,才会返回True。False是布尔类型(bool)的实例,而[]是列表类型(list)的实例,两者类型不同,直接比较时返回False。
补充个例子帮你理解:整数0的布尔值也是False,但0 == False会返回True——这是因为bool是int的子类,0和False在数值上等价;但列表和布尔没有这种继承或数值等价关系,所以空列表和False的相等性比较返回False。
内容的提问来源于stack exchange,提问作者Mudge
相关产品推荐
相关产品推荐

