平等行为和嵌套结构

时间:2015-03-16 16:17:03

标签: python

在某些时候,我开始认识到针对两个深层嵌套结构的相等声明是不可靠的。在最外层容器上进行相等性检查时,是否会忽略某些深嵌套

我应该明确指出,通过深层嵌套的结构,我的意思是:

  1. 仅包含dict,list,内置类型和对象,我知道要比较日期时间。
  2. 列表顺序很重要
  3. 容器尺寸可以很深或很宽
  4. 没有生成器或自定义迭代器
  5. 嵌套没有递归部分
  6. 我做了很多测试,我总能得到我期望的答案。但是,几乎不可能考虑我无法想到的测试:)

1 个答案:

答案 0 :(得分:1)

内置容器类型的行为定义为here。它说:

  

使用相应元素的比较,按字典顺序比较元组和列表。这意味着要比较相等,每个元素必须比较相等,并且两个序列必须是相同的类型并具有相同的长度。

     

映射(字典)比较相等,当且仅当它们的排序(键,值)列表比较相等时。

因此,相等比较递归到内容这一事实是语言定义的一部分。它将始终检查需要检查的所有嵌套结构。 (这并不意味着它总是会检查它们;当它知道答案时它可能会停止。例如,如果你测试两个深度嵌套的列表上的相等性,它们的第一个元素是不相等的,它只会在它返回时返回False注意到一个不相等的元素,而没有检查嵌套结构的其余部分。)