<snip a bunch of stuff> > Terminology is important, because we understand the world through > language. If your language is confused or misleading, your understanding > will also be confused or incomplete.
I think the issue is pretty simple, myself: With mutable objects, Python has the semantics normally associated with pass-by-reference. With immutable objects, Python has the semantics normally associated with pass-by-value. So you could say that Python has both pass-by reference and pass-by-value (modulo the fact that pass-by-reference doesn't exist at some level, and is a semantic layer on top of pass-by-value. But semantics are what we're talking about here). However, there is *no way* in Python to get pass-by-value semantics with a mutable object, or pass-by-reference semantics with an immutable one (you can build your own scaffolding to mimic it, but the language won't change it's semantics for you). Therefore, it's more correct to say that Python has neither pass-by-reference semantics or pass-by-value semantics, but some third thing. And thus the name pass-by-object, where the calling semantics are that you always get a reference to an object, but what (if any) other names are bound to that object, or if they can be bound to that object, depends on the object. When you can pass a mutable int to a function (not pass a namespace/name pair, but a real live mutable int), then Python will have pass-by-reference. When you can pass a list that isn't a shared reference without explicitly copying it or subclassing it to be immutable, then Python will have pass-by-value. In the meantime, it has pass-by-object. > > > > -- > Steven. > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list