2015-03-16 3 views
0

В какой-то момент я понял, что утверждение равенства относительно двух глубоко вложенных структур не является надежным. Это когда-нибудь, когда какое-то глубокое гнездо игнорируется при выполнении проверки равенства на самом внешнем контейнере?Поведение равноправия и вложенных структур

я должен быть ясно, о том, что глубоко вложенной структуры я имею в виду:

  1. Содержит только Dict, список, построенный в типах и объектов, я знаю, как сравнить даты-времени.
  2. заказ Списка важен
  3. Размер контейнера может быть очень глубоким и очень широким
  4. Нет генераторов или пользовательских итераторы
  5. Там нет рекурсивных частей к гнездовой

Я сделал количество тестов, и я всегда получаю ответ, который я ожидаю. Но, почти невозможно рассмотреть те тесты, о которых я не могу думать :)

+0

Учитывая ограничения, которые вы указали, я думаю, что он надежен. –

ответ

1

Поведение для встроенных типов контейнеров определено here. В нем написано:

Кортежи и списки сопоставляются лексикографически, используя сравнение соответствующих элементов. Это означает, что для сравнения равенства каждый элемент должен сравниваться с равным, и две последовательности должны быть одного типа и иметь одинаковую длину.

Сопоставления (словари) сравнивают одинаковые, если и только если их отсортированные (ключевые, значения) списки сравниваются равными.

Таким образом, тот факт, что сравнения сравнений, относящиеся к содержанию, являются частью определения языка. Он всегда будет проверять все вложенные структуры, которые необходимо проверить. (Это не значит, что он всегда будет проверять их все: он может остановиться, когда он знает ответ. Например, если вы проверяете равенство на два глубоко вложенных списка, чьи первые элементы неравны, он просто вернет False, как только он замечает, что один неравный элемент, не проверяя остальную часть вложенной структуры.)

+0

Спасибо, брэн, это сводило меня с ума на долгие годы. Кто-то сказал мне, что это ненадежно ... какого контекста я не помню. – Rescommunes

Смежные вопросы