Ответ 1
Цитата из сравнение docs,
Кортежи и списки
Кортежи и списки сравниваются лексикографически, используя сравнение соответствующих элементов. Это означает, что для сравнения равенства каждый элемент должен сравниваться с равным, и две последовательности должны быть одного типа и иметь одинаковую длину.
Если не одинаково, последовательности упорядочиваются так же, как и их первые отличающиеся элементы. Например, cmp ([1,2, x], [1,2, y]) возвращает то же, что cmp (x, y). Если соответствующий элемент не существует, более короткая последовательность упорядочивается сначала (например, [1,2] < [1,2,3]).
Словари
Сопоставления (словари) сравниваются равными, если и только если их отсортированные (ключевые, значения) списки сравниваются равными. (Реализация вычисляет это эффективно, без создания списков или сортировки.) Результаты, отличные от равенства, разрешаются последовательно, но не определяются иным образом. (Более ранние версии Python [до 2.7.6] использовали лексикографическое сравнение отсортированных (ключевых, значений) списков, но это было очень дорого для обычного случая сравнения для равенства. Еще более ранняя версия Python сравнивала словари только по идентичности, но это вызвало сюрпризы, потому что люди ожидали, что смогут проверить словарь на пустоту, сравнив его с {}.)
Кроме того, найдите эту часть документации, которая специально сравнивает типы последовательностей с самим собой и другими типами,
Объекты последовательности могут сравниваться с другими объектами с тем же типом последовательности. Сравнение использует лексикографическое упорядочение: сначала сравниваются первые два элемента, и если они отличаются друг от друга, это определяет результат сравнения; если они равны, сравниваются следующие два элемента и так далее, пока не будет исчерпана любая последовательность. Если два элемента, которые нужно сравнить, сами являются последовательностями одного и того же типа, лексикографическое сравнение выполняется рекурсивно. Если все элементы из двух последовательностей сравниваются равными, последовательности считаются равными. Если одна последовательность является исходной подпоследовательностью другой, более короткая последовательность является меньшей (меньшей). Лексикографическое упорядочение для строк использует порядок ASCII для отдельных символов.
Обратите внимание, что сравнение объектов разных типов является законным. Результат детерминирован, но произволен: типы упорядочены по их имени. Таким образом, список всегда меньше строки, строка всегда меньше кортежа и т.д. (Не следует полагаться на правила для сравнения объектов разных типов: они могут изменяться в будущей версии языка.) Смешанные числовые типы сравниваются в соответствии с их числовым значением, поэтому 0 равно 0.0 и т.д.
Сравнение фактического словаря по исходному коду Python 2.7, выглядит следующим образом
-
Сначала сравните длину ключей. (
-1
возвращается, если сначала имеет меньшие ключи,1
, если второй имеет меньшие ключи) -
Если они совпадают, тогда он пытается найти ключ, для которого либо ключ отсутствует в другом, либо другом (это называется характеризующим dict)
-
Он выполняет шаг 2, оба способа, как
a, b
, так иb, a
. Если любой из них пуст, то оба словаря считаются равными. -
Теперь различия, которые мы получили от описания словарей, будут сравниваться, чтобы получить фактический результат сравнения.