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