Я попробовал ваш пример на своей машине (python 2.7):
>>> sorted(l)
[(<__main__.S instance at 0x107142a70>, 'a'), (<__main__.S instance at 0x107142ab8>, 'b'), (<__main__.S instance at 0x107142b00>, 'c')]
Обратите внимание, что отсортированный список имеет порядок id()
:
>>> id(a)
4413729392
>>> id(b)
4413729464
>>> id(c)
4413729536
Если я генерирую хэши, я получаю:
>>> hash(a)
275858087
>>> hash(b)
-9223372036578917717
>>> hash(c)
275858096
Что говорит о том, что сортировка не на основе хеша.
См. Ответ Дерекердмана о том, как заставить Python сортировать ваш класс так, как вы хотите.
Редактировать: Кстати, если вы поместите элементы в список в обратном порядке, а затем отсортируете, вы получите:
>>> l = [(c,'c'), (b, 'b'), (a, 'a')]
>>> sorted(l)
[(<__main__.S instance at 0x107142a70>, 'a'), (<__main__.S instance at 0x107142ab8>, 'b'), (<__main__.S instance at 0x107142b00>, 'c')]
Еще раз, он отсортирован в порядке id()
.