string identity and comparison

Peter Otten __peter__ at web.de
Thu Dec 16 07:58:06 EST 2010


Peter Otten wrote:

> Steve Holden wrote:
> 
>> On 12/16/2010 6:55 AM, Jean-Michel Pichavant wrote:
>>> Fellows,
>>> 
>>> I'd like to illutrate the fact that comparing strings using identity is,
>>> most of the time, a bad idea. However I'm searching a short example of
>>> code that yields 2 differents object for the same string content.
>>> 
>>> id('foo')
>>> 3082385472L
>>> id('foo')
>>> 3082385472L
>>> 
>>> Anyone has that kind of code ?
>>> 
>>> JM
>>> 
>>>>> id("foo")
>> 2146743808
>>>>> id ("f"+"o"+"o")
>> 2146744096
> 
> Note that the concatenation may be misleading because it's not the direct
> reason that the ids differ; the first string doesn't exist anymore when
> the second is built, but the memory location of the first "foo" is
> occupied (perhaps by an intermediate string) when the second "foo" is
> created. To illustrate:
> 
>>>> id("foo")
> 140394722220912
>>>> id("bar")
> 140394722220912
> 
>>>> id("foo")
> 140394722220912
>>>> x = 1234
>>>> id("foo")
> 140394722221008

Or less convoluted:

>>> foo = "f" + "o" + "o"
>>> foo is "foo"
True




More information about the Python-list mailing list