
There are circumstances, for example in unit testing, when it might be useful to check if two range objects describe the same range. Currently, this can't be done using the '==' operator: >>> range(5) == range(5) False To get a useful comparison, you would either need to realise both range objects as lists or use a function like def ranges_equal(r0, r1): if not r0: return not r1 return len(r0) == len(r1) and r0[0] == r1[0] and r0[-1] == r1 [-1] All other built-in sequence types (that is bytearray, bytes, list, str, and tuple) define equality by "all items of the sequence are equal". I think it would be both more consistent and more useful if range objects would pick up the same semantics. When implementing '==' and '!=' for range objects, it would be natural to implement the other comparison operators, too (lexicographically, as for all other sequence types). This change would be backwards incompatible, but I very much doubt there is much code out there relying on the current behaviour of considering two ranges as unequal just because they aren't the same object (and this code could be easily fixed by using 'is' instead of '=='). Opinions? -- Sven