[Python-Dev] Re: [Python-checkins] python/dist/src/Pythoncompile.c, 2.330, 2.331

Phillip J. Eby pje at telecommunity.com
Tue Oct 26 18:01:29 CEST 2004


At 12:31 PM 10/26/04 +0100, Michael Hudson wrote:
>"Phillip J. Eby" <pje at telecommunity.com> writes:
>
> > At 09:36 AM 10/25/04 -0700, Guido van Rossum wrote:
> >>Well, then perhaps code object comparison (and function object
> >>comparison) ought to work the same as 'is', not try to do something
> >>clever?
>
>+1
>
> > Isn't that what function objects do now? (for some value of "now")
>
>Probably.  I don't see the relavence, though.

Because Guido sounded like he was saying that function objects didn't 
already do that.


> > Python 2.3.4 (#1, Jun 13 2004, 11:21:03)
> > [GCC 3.3.1 (cygming special)] on cygwin
> > Type "help", "copyright", "credits" or "license" for more information.
> >  >>> l = [lambda:None for i in 0,1]
> >  >>> l[0]==l[1]
> > False
> >  >>> l[0].func_code is l[1].func_code
> > True
>
>What's happened *here* is that two code objects got compiled up for
>the two lambdas, but they compare equal so only one goes into
>co_consts.

Actually, no.  There's only one code object, otherwise this:

     [lambda:None for i in range(10000)]

would somehow create 10000 code objects, which makes no sense.  There's 
simply a 1:1 mapping between function and class suites in a source text, 
and code objects created in the module's co_consts.  Code comparison has 
nothing to do with it.



More information about the Python-Dev mailing list