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 -- http://mail.python.org/mailman/listinfo/python-list