Beginner: How to copy a string?
Terry Reedy
tjreedy at udel.edu
Thu Mar 27 19:49:29 EST 2003
More information about the Python-list mailing list
Thu Mar 27 19:49:29 EST 2003
- Previous message (by thread): Beginner: How to copy a string?
- Next message (by thread): Beginner: How to copy a string?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
<dbrown2 at yahoo.com> wrote in message news:d524bdb3.0303271627.739fa868 at posting.google.com... > I hate to ask this because the answer must be really obvious. So > obvious in fact that I couldn't find it in the tutorial, FAQ search, > and other docs, google searches, etc. > > I just want to make a copy of a string, say s='abc'. Why? Given that strings are immutable, there is no point to doing so (that I can think of ;-). Think about it. > I understand > that python is not like some other languages and '=' just assigns a > name to an existing object and does not copy the object. But there is > no s.copy() method apparently. Again, what would be the point? What would it enable that you cannot do now? > The other intuitive way (to me) was to > try str(s) which I think is similar to the way to copy some other > types such as list(). That did not work. I did see a newsgroup post > that said to use [:] and I tried it but this is what I get: > > 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. Congratulations on actually trying some things out. Here's some more! >>> import copy >>> a='abc' >>> id(a) 7957152 >>> id(copy.copy(a)) 7957152 >>> id(copy.deepcopy(a)) 7957152 Gee, Python is *really* resistant to copying strings. Same for numbers. >>> i=1234567 >>> id(i) 7691536 >>> id(copy.copy(i)) 7691536 > Ok, so what's the trick. Please be kind. It's really not obvious to > me. In fairness I did see in the FAQ you could convert it to a list > and rejoin it which I assume would work, but I suspect there is a more > direct way. Why should there be? Anything you do to a string to 'change' its value generates a new string. It does not matter whether you start with 'a' or an identical copy. Python goes to some trouble to *not* make redundant copies of strings (ditto for commonly used 'small' numbers). Terry J. Reedy PS. If you write a C extension, you can poke into the string object and copy the string buffer, or even change it in place, but then you are programming in C and not Python, and evading the Python/C API.
- Previous message (by thread): Beginner: How to copy a string?
- Next message (by thread): Beginner: How to copy a string?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list