reference or pointer to some object?

Reinhold Birkenfeld reinhold-birkenfeld-nospam at
Thu Jan 13 22:43:35 CET 2005

Torsten Mohr wrote:
> Hi,
>> Could you give us a more concrete use case?  My suspicion is that
>> anything complicated enough to be passed to a method to be modified will
>> probably be more than a simple int, float, str or tuple...  In which
>> case, it will probably have methods to allow you to update it...
> yes, to be more explicit: I'm quite new to python and i wrote
> a small function that does a hexdump of a string.  That string
> can be quite large, so i suspected a large overhead when the
> string would be copied and handed over to the function.

It isn't.

> But i think my understanding was wrong (though it is not yet
> clear).  If i hand over a large string to a function and the
> function had the possibility to change it, wouldn't that mean
> that it is necessary to hand over a _copy_ of the string?
> Else, how could it be immutable?

You cannot modify a string. Notice that there are no in-place string
methods -- str.strip() for example returns a new string.

> Thinking about all this i came to the idea "How would i write
> a function that changes a string with not much overhead?".

Basically, working with very large strings is costly (it saves overhead
otherwise). So do make smaller parts and operate on these chunks.

> def func(s):
>   change s in some way, remove all newlines, replace some
>     charaters by others, ...
>   return s
> s = func(s)
> This seems to be a way to go, but it becomes messy if i hand over
> lots of parameters and expect some more return functions.

You can use tuples for that. Automatic tuple packing helps:

def func(x, y):
    # change x, y and generate z

    return x, y, z

x, y, z = func(x, y)

> Maybe it is because i did lots of perl programming, but
> func(\$s) looks easier to me.

It does, but in fact the problem is not that the string is passed by
value, but that the string is not modifiable...


More information about the Python-list mailing list