On 5/5/2011 6:59 AM, Steven D'Aprano wrote:
On Thu, 05 May 2011 21:48:20 +1000, Chris Angelico wrote:

On Thu, May 5, 2011 at 9:44 PM, Mel<mwil...@the-wire.com>  wrote:
John Nagle wrote:
On 5/4/2011 5:46 PM, harrismh777 wrote:
Or, as stated earlier, Python should not allow 'is' on immutable
objects.

     A reasonable compromise would be that "is" is treated as "==" on
immutable objects.

I foresee trouble testing among float(5), int(5), Decimal(5) ...

Define 'x is y' as 'type(x)==type(y) and
isinstance(x,(int,float,tuple,etc,etc,etc)) and x==y' then.

   That's close to the right answer.

`is` is supposed to be a *fast* operator, not even slower than equality
testing.

   That's an implementation problem.  Those are cheap tests at the
machine code level.  An efficient test looks like this:

    def istest(a, b) :
        if id(a) == id(b) :     # the cheap address test
            return(True)
        if type(x) != type(y) : # cheap binary comparison
            return(False)
        if mutable(x) :         # the interpreter knows this
            return(False)
        return(x == y)          # equality test for mutables

Probably about 12 machine instructions, and the full "==" test
is only reached for cases in which "is" now produces wrong answers.

It's encouraging that a Google code search finds no matches of

        if .* is \"
or
        if .* is 1

in Python code.

                                John Nagle


        

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to