string slicing

Kent Johnson kent3737 at yahoo.com
Sun Dec 5 09:44:13 EST 2004


Ishwor wrote:
>>>>s = 'hello'
>>>>m = s[:]
>>>>m is s
> 
> True
> 
>  I discussed the *is* operator with some of the pythoners before as
> well but it is somewhat different than what i intended it to do. The
> LP2E by Mark & David says -
> " m gets a *full top-level copy* of a sequence object- an object with
> the same value but distinct piece of memory." but when i test them
> with *is* operator then the result is True. Why is this happening??

This behaviour is due to the way strings are handled. In some cases strings are 'interned' which 
lets the interpreter keep only a single copy of a string. If you try it with a list you get a 
different result:

 >>> s=list('hello')
 >>> s
['h', 'e', 'l', 'l', 'o']
 >>> m=s[:]
 >>> m
['h', 'e', 'l', 'l', 'o']
 >>> m is s
False

Kent



More information about the Python-list mailing list