Beginner: How to copy a string?
Delaney, Timothy C (Timothy)
tdelaney at avaya.com
Thu Mar 27 19:59:09 EST 2003
More information about the Python-list mailing list
Thu Mar 27 19:59:09 EST 2003
- Previous message (by thread): Beginner: How to copy a string?
- Next message (by thread): __import__ woes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> From: dbrown2 at yahoo.com [mailto:dbrown2 at yahoo.com] > > I just want to make a copy of a string, say s='abc'. I understand > > s = 'abc' > >>> id(s) > 13356752 > >>> t = s[:] > >>> id(t) > 13356752 > >>> t > 'abc' > > Just like with str() it looks like it's still the same object. Before anything else ... Why do you want to copy a string? What use do you *actually* have for a copy of a string? Now, onto the answer. 1. In general, you don't. Strings are immutable, so a copy of a string is indistinguishable from the original except by its ID. 2. It is impossible to guarantee that you will get a copy of a string. An implementation is free to do whatever it likes with strings e.g. it could decide that *every* string with the same value will refer to the same object - or it could have every string be a separate object. 3. CPython interns all literal strings that look like python identifiers. 'abc' (without the quotes) would be a valid python identifier so it is interned. This is done partially so that identifier lookups in dictionaries are as fast as possible. 4. A string copy using copy() or [:] is special-cased by the string object to simply return `self`. 5. Given all that, to do what you want, the following will work with current versions of Python (no guarantees of future versions though): s = 'abc' print id(s) t = s[:] print id(t) u = t[:1] + t[1:] print id(u) print repr(s) print repr(t) print repr(u) Note however what happens if you try to copy an empty string ... s = '' print id(s) t = s[:] print id(t) u = t[:1] + t[1:] print id(u) print repr(s) print repr(t) print repr(u) So, I come back to my original question - why do you want to copy a string? Tim Delaney
- Previous message (by thread): Beginner: How to copy a string?
- Next message (by thread): __import__ woes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list