"/a" is not "/a" ?

skip at pobox.com skip at pobox.com
Fri Mar 6 17:08:48 EST 2009


    Gary> *Do NOT use "is" to compare immutable types.* **Ever! **

The obvious followup question is then, "when is it ok to use 'is'?"

    Robert> Well, "foo is None" is actually recommended practice....

Indeed.  It does have some (generally small) performance ramifications as
well.  Two trivial one-line examples:

    % python -m timeit -s 'x = None' 'x is None'
    10000000 loops, best of 3: 0.065 usec per loop
    % python -m timeit -s 'x = None' 'x == None'
    10000000 loops, best of 3: 0.121 usec per loop
    % python -m timeit -s 'x = object(); y = object()' 'x == y'
    10000000 loops, best of 3: 0.154 usec per loop
    % python -m timeit -s 'x = object(); y = object()' 'x is y'
    10000000 loops, best of 3: 0.0646 usec per loop

I imagine the distinction grows if you implement a class with __eq__ or
__cmp__ methods, but that would make the examples greater than one line
long.  Of course, the more complex the objects you are comparing the
stronger the recommendation agaist using 'is' to compare two objects.

Skip



More information about the Python-list mailing list