Jean-Paul Calderone wrote: > On 17 Jun 2006 00:49:51 -0700, Mike Duffy <[EMAIL PROTECTED]> wrote: > >> I just recently realized that the comparison operator "is" actually >> works for comparing numeric values. Now, I know that its intended use >> is for testing object identity, but I have used it for a few other >> things, such as type checking, and I was just wondering whether or not >> it is considered bad practice in the Python Community to use it for >> numerics as well. >> >> Example: >> >> a = range(5) >> b = range(5) >> >> if len(a) is len(b): >> print "They're the same size!" >> else: >> print "They're not the same size!" >> >> > > No, this is wrong. > An even simpler demo of why this DEAD WRONG: Consider:
>>> 100 is (99+1) False This is asking if two different ways of computing the value (of 100) are stored internally as one object with that value or two separate objects each with that value. But, lest you think you understand that, consider also: >>> 2 is (1+1) True >>> 100 is 100 True This is highly implementation dependent. The current (C) implementation of Python has a cache for small integers, so the attempt to compare values with "is" works for some small integers, and fails for some large integers, but curiously, not all instances of comparing large integers. Gary Herron > >>>> a = range(100) >>>> b = range(100) >>>> len(a) is len(b) >>>> > False > > Use "is" to determine if two variables refer to exactly the same > object, never to determine if two objects are equal. > > Jean-Paul > -- http://mail.python.org/mailman/listinfo/python-list