Newbie question about string(passing by ref)
James T. Dennis
jadestar at idiom.com
Wed May 30 23:29:42 EDT 2007
Duncan Booth <duncan.booth at invalid.invalid> wrote:
> lazy <arunmail at gmail.com> wrote:
>> I want to pass a string by reference. I understand that strings are
>> immutable, but Im not
>> going to change the string in the function, just to aviod the overhead
>> of copying(when pass-by-value) because the
>> strings are long and this function will be called over and over
>> again.
> You'll find it is pretty hard to get Python to copy a string even if you
> wanted it to. About the only way is to break it apart and then construct a
> new string with the same value from it.
This, of course, is an implementation detail. There are other programming
languages which use "interned" objects and, as far as I know, they are
considered implementation details with undefined semantics. (In other
words you are supposed to ignore this detail and not rely on the identity
of any particular objects except those which are defined as such by the
language).
(An example, in Python, of an object with a defined identity would be
"None" --- all references to "None" are intentionally references to
a single object and it is the most notable case where the "is" operator
is preferred).
That said it seems to be trivially easy to "copy" a short string
in the version of Python I'm using here:
Python 2.4.4 (#2, Oct 20 2006, 00:23:25)
[GCC 4.1.2 20061015 (prerelease) (Debian 4.1.1-16.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = "foo"
>>> bar = "".join(list(foo))
>>> id(foo); id(bar); foo is bar
-1211235616
-1211235296
False
>>>
--
Jim Dennis,
Starshine: Signed, Sealed, Delivered
More information about the Python-list
mailing list