On Friday, March 20, 2015 at 8:27:26 AM UTC+5:30, Victor Hooi wrote: > Hi Ben, > > When I said "deep", I meant, as in, to an arbitrary level of nesting (i.e. > dicts, containing dicts, containing dicts etc) - sorry if I got the > terminology wrong. > > The two dicts weren't equal by intention - the idea was that a comparison > operator would return "False" for those two. > > I was just curious why cmp() was phased out (as in, were there cases where > "==" was better) - but if functionality they're the same, and it's just a > nomenclature thing, that's also fine =). > > Finally, so cmp()/== return true/false for comparison...
I guess you are confusing two orthogonal questions: 1. deep vs shallow comparison 2. binary vs trivalent comparison Numbers (not complex) satisfy the trichotomy law: ie for any 2 numbers x,y: x < y or x > y o x = y Unfortunately most logic in programming languages is binary -- true or false (well Fortran had an arithmetic if -- very unfashionable even in Fortran -- but thats because of the need to goto) Likewise C's strcmp is trivalent. But a trivalent value is clumsy in a binary logic. Unfortunately no switch statement for <, =, > -- so we are stuck with if-else-if-else. All this is unrelated to deep-vs=shallow: cmp is deep, == is deep In fact what would/could a shallow comparison mean?? Shallow/deep only make sense for copy not comparison [If at all: Languages like Haskell are explicitly constructed so that the programmers is disallowed from making that distinction at all] -- https://mail.python.org/mailman/listinfo/python-list