python string comparison oddity

Faheem Mitha faheem at email.unc.edu
Wed Jun 18 18:13:01 EDT 2008


On Wed, 18 Jun 2008 12:57:44 -0700 (PDT), Lie <Lie.1296 at gmail.com> wrote:
> On Jun 19, 2:26 am, Faheem Mitha <fah... at email.unc.edu> wrote:
>> Hi everybody,
>>
>> I was wondering if anyone can explain this. My understanding is that 'is'
>> checks if the object is the same. However, in that case, why this
>> inconsistency for short strings? I would expect a 'False' for all three
>> comparisons. This is reproducible across two different machines, so it is
>> not just a local quirk. I'm running Debian etch with Python 2.4.4 (the
>> default).
>>                                                             Thanks, Faheem.
>>
>> In [1]: a = '--'
>>
>> In [2]: a is '--'
>> Out[2]: False
>>
>> In [4]: a = '-'
>>
>> In [5]: a is '-'
>> Out[5]: True
>>
>> In [6]: a = 'foo'
>>
>> In [7]: a is 'foo'
>> Out[7]: True
>
> Yes, this happens because of small objects caching. When small
> integers or short strings are created, there are possibility that they
> might refer to the same objects behind-the-scene. Don't rely on this
> behavior.

Yes, but why is '-' and 'foo' cached, and not '--'? Do you know what
the basis of the choice is?
                                                             Faheem.



More information about the Python-list mailing list