What does python 2.7 use to sort vanilla class instances? I'm interested in the default sorting behavior.
Suppose I have the class
class S():
pass
Then I can create a couple of instances, and sort them:
a = S(); b = S(); c = S()
l = [(a,'a'), (b,'b') ,(c, 'c')]
sorted(l)
This will print some sorting of the objects. Now I have a two part question:
Is python using the objects' __hash__(), and thus their id()?
Is it possible to override __hash__() to influence the sorting behavior?
解决方案
Python's sort algorithm exclusively compares items using a "less than" test, which can be implemented either using the __cmp__() special method (now deprecated) or __lt__() on the class.
In the absence of any specific instruction on how to compare two objects, the id() is used (not the hash) for objects of the same type, as in your case.