On 30 May 2010 18:38:23 UTC+1, candide <cand...@free.invalid> wrote: > Two non mutable objects with the same value shall be allocated at a constant > and unique address ?
Nope. >>> a = 999 >>> b = 999 >>> id(a) == id(b) False Your statement will be the case for small integers, but this in an implementation detail. Indeed, this used to be the case for integers up to 100 (IIRC) or thereabouts, but it's now the case up to 256: >>> a = 256 >>> b = 256 >>> id(a) == id(b) True >>> a = 257 >>> a = 257 >>> id(a) == id(b) False Some identifier-like strings are also interned like this: >>> a = 'foo' >>> b = 'foo' >>> id(a) == id(b) True >>> a = 'two words' >>> b = 'two words' >>> id(a) == id(b) False But again, it's an implementation detail, and shouldn't be relied upon. This same issue also comes up with people noticing that they can compare small integers with the 'is' operator, and getting a surprise when bigger numbers come along: >>> a = 256 >>> b = 256 >>> a is b True >>> a = 257 >>> b = 257 >>> a is b False -- Cheers, Simon B. -- http://mail.python.org/mailman/listinfo/python-list