在某些时候,我开始认识到针对两个深层嵌套结构的相等声明是不可靠的。在最外层容器上进行相等性检查时,是否会忽略某些深嵌套?
我应该明确指出,通过深层嵌套的结构,我的意思是:
我做了很多测试,我总能得到我期望的答案。但是,几乎不可能考虑我无法想到的测试:)
答案 0 :(得分:1)
内置容器类型的行为定义为here。它说:
使用相应元素的比较,按字典顺序比较元组和列表。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并具有相同的长度。
映射(字典)比较相等,当且仅当它们的排序(键,值)列表比较相等时。
因此,相等比较递归到内容这一事实是语言定义的一部分。它将始终检查需要检查的所有嵌套结构。 (这并不意味着它总是会检查它们;当它知道答案时它可能会停止。例如,如果你测试两个深度嵌套的列表上的相等性,它们的第一个元素是不相等的,它只会在它返回时返回False注意到一个不相等的元素,而没有检查嵌套结构的其余部分。)