Can you tell us what you mean by "several names of one object"? You mean this?

a = range(10)
b = a

id(a) == id(b)


? Passing references instead of values is an extremely important concept of many languages, without it you would end up copying most of the time.

OK. I've obviously been thinking about things the wrong way. In Forth you
pass the memory address around, and presumably that's essentially what's
happening when you pass a reference.

Pretty much, yes. And I for once can say that I've been caught by modifying e.g. stack-locals instead of heap-objects in C++ by accident.


The problem is, I get caught frequently
in this situation:

a = [1,2,3]

def foo(x):
        do_something_with_x
        return x

...

Then when I call foo(a), a gets changed. It just isn't the effect I expect
from changing a local.

It's the way things work - mutables are mutables. If you want them to be modified, use the module copy.

As a rule of thumb, don't return objects you didn't create inside a function from scratch.

Which is the exact reasoning for the

list.sort

method btw - returning None is supposed to make you aware of the in-place modification.




Diez
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to