On May 4, 5:40 pm, Michael Torrie <torr...@gmail.com> wrote: > Which is exactly what the code showed. The first one isn't a mistake. > You just read it wrong.
No, I read "call-by-value" but it does not make a copy. Call-by-value dictates a deep copy or copy-on-write. Python does neither. Python pass a handle to the object, not a handle to a copy of the object. If you want to see call-by-value in practice, take a look at MATLAB, SciLab or Octave; or consider what C++ copy constructors do in function calls with value types. The first one is indeed a mistake. An object has a value. A name binds to an object, not to a value. If Python did pass-by-value, the string would be inserted in an object (here: a list) with the same value (e.g. empty list), it would not modify the same object by which you called the function. I think you understand what Python does, but not what call-by-value would do. C++ tells you the difference: // copy constructor is invoked // x is a copy of the argument's value // this is call-by-value void foobar1(Object x); // no copy is taken // x is a logical alias of the argument // this is call-by-reference void foobar2(Object &x); // x is a pointer, not an object // x is a copy of another pointer // this is similar to Python sematics // the pointer is passed by value, not the pointee // in C, this is sometimes called call-by-reference // as there are no reference types, but it's not void foobar3(Object *x); Sturla -- http://mail.python.org/mailman/listinfo/python-list