为什么下面的表达式求值为False?比较中的两个值都是false。
print('' == [])
根据文档:
对象的类型决定对象支持的操作(例如,"它有长度吗?"),并且定义可能的值对于该类型的对象
,,还规定:
==
比较两个对象的值
然而,由于Python中对象的值非常抽象,没有规范的方法来访问它,因此==
的默认行为比较标识两个对象(可以认为是对象在内存中的地址),但定义为:
保证该对象在其生命周期内是唯一且不变的整数。生命周期不重叠的两个对象可以具有相同的标识。
同样重要的是,许多内置类型在各自的类型中都有自定义的比较方法,这些方法基于它们的"值"进行比较。
虽然你的两个对象都是false,但它们是不同的类型(String和List),因此,使用了比较标识的默认行为。由于两个对象不可能具有不重叠的生命周期,因此它们的身份将不同,因此'' == []
将计算为False
。
为了比较两个对象的真值,首先按照Waket在注释中建议的将它们转换为布尔值:
bool('') == bool([])
利用Python的真值测试.