On 1/10/2011 8:07 AM Karim said...

Hello All,

I am not a beginner in Python language but I discovered a hidden
property of immutable elements as Numbers and Strings.

s ='xyz'
 >>> t = str('xyz')

 >>> id(s) == id(t)
True

Thus if I create 2 different instances of string if the string is
identical (numerically).

well, not predictably unless you understand the specifics of the implementation you're running under.


>>> from string import letters
>>> longstring = letters*100
>>> otherstring = letters*100
>>> id(longstring)
12491608
>>> id (otherstring)
12100288
>>> shortstring = letters[:]
>>> id(letters)
11573952
>>> id(shortstring)
11573952
>>>


I get the same object in py db. It could be evident but if I do the same
(same elements) with a list it
will not give the same result. Is-it because of immutable property of
strings and numbers?


It has to do with Interning -- see eg
  http://docs.python.org/library/functions.html#intern

Generally, the shorter strings are interned to speed up dictionary access. At this point, I'd characterize the coincidence of id()s as more of an implementation detail side effect than anything else.

Emile

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to