On Thu, 13 Dec 2007 22:52:56 +0100, Bruno Desthuilliers wrote: > flyfree a écrit : [snip] >> What is the difference between "y = [3,4]" and "y[0]=3 y[1] =4 " > > In the first case, you rebind the local name y to a new list object - > and since the name is local, rebinding it only affects the local > namespace. In the second case, you mutate the list object (bound to the > local name y) passed to the function. The point to remember is that in > Python, all variables are references to objects, but names (including > params) are local. > > HTH
Even though you have the assignment operator *in both cases*, it does **not** issue the same thing. As Bruno pointed out, in the first case ``y = [3,4]`` it is *rebinding* the name `y`. When used with slice notation, the assignment operator tells the object bound to y, "Hey, change your item with name/number 0 to 3, please." This can succeed but it doesn't have to. Raw assignments always succeed. (You could also make assignments of y[0] result in whatever you want, a SystemExit for example; not so with pure assignments of y! The behaviour of assignments cannot be influenced in any way.) If you're interested in the special methods Python uses there, `Emulating container types <http://docs.python.org/ref/sequence- types.html#l2h-232>`_ might be interesting for you. To sum up, the assignment operator has multiple meanings depending on its left-hand-side operand. HTH, -- http://mail.python.org/mailman/listinfo/python-list