See the following... >>> class X(list): def __cmp__(self,anX): print "comparing from",id(self) return cmp(self.v,anX.v) >>> x1=X() >>> x2=X() >>> x1.v=-1 >>> x2.v=100 >>> x1>x2 False >>> x1<x2 False I expected x1>x2 or x1<x2 were False and True respectively.