[Tutor] Equality of numbers and Strings

bob gailer bgailer at gmail.com
Mon Jan 10 17:54:33 CET 2011


On 1/10/2011 11:07 AM, Karim wrote:
>
> 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).

Python "interns" certain literal strings - so a 2nd attempt to create 
'xyz' will refer back to the original object.

I don't know all the rules - but the following program never prints n:

for n in range(1,10000):
     s = eval("'" + 'wrtnjasdflkasjj'*n + "'")
     t = eval("'" + 'wrtnjasdflkasjj'*n + "'")
     if id(s) != id(t):
         print n; break

whereas if I insert a ";" in the literal the program prints 1!

Also note str() returns the argument object unchanged.


-- 
Bob Gailer
919-636-4239
Chapel Hill NC



More information about the Tutor mailing list