Ruediger wrote:

I am aware that id is a built in function why shouldn't i use it?

I consider this a sensible thing to have tried, but I an not too surprised it does not work because I am aware that built-in functions do not have all the features of Python function.

I have asked about this case on Py-dev.
Subject: Can/should built-in functions get __get__?

Replaceing lambda with id was intended as an performance hack. Profiling
proofed that lambda itself takes more than twice as much cpu time than id
alone. (profile shortened)

         3610503 function calls in 22.451 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)

   960096    4.593    0.000    6.702    0.000 test14.py:33(<lambda>)
        1    0.003    0.003   22.451   22.451 {execfile}
   960096    2.109    0.000    2.109    0.000 {id}

However using lambda seemed useless to me since id already took an argument
and wrapping it in an python function simply has no real purpose.

Ironically, such simple wrappings are usually considered bad form.

There *is* a third alternative, which works in this case, and which should be closer in speed to id. I will leave you to do a speed test.

>>> class bang(list):
        __hash__ = object.__hash__

>>> s=set()
>>> s.add(bang())
>>> s
{[]}

__eq__ = object.__eq__ should also work instead of the Python implementation I gave in my response to another response.

Terry Jan Reedy

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

Reply via email to