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... Reinhold -- http://mail.python.org/mailman/listinfo/python-list