Bruno Desthuilliers wrote: > SpreadTooThin a écrit : > > Bruno Desthuilliers wrote: > > > >>Nick Vatamaniuc a écrit : > >>(snip) > >> > >>>In Python all the primitives are copied and all other entities are > >>>references. > >> > >>Plain wrong. There's no "primitives" (ie : primitive data types) in > >>Python, only objects. And they all get passed the same way. > > > > > > so.. > > def fn(x): > > x = x + 1 > > print x > > > > a = 2 > > fn(a) > > fn(2) > > > > Wouldn't you say that this is being passed by value rather than by > > refrence? > > It's not passed by value. when in fn(), the *local* name 'x' is bound to > (IOW:references) the exact same object you passed to fn(). Then you > rebind this (local) name to *another* object. > > def fn((x): > print id(x) > x = x + 1 > print id(x) > > n = 1256 > print id(n) > fn(n) > > def fn2(alist): > print id(alist) > alist.append(42) > > mylist = [] > print id(mylist) > fn2(mylist) > print mylist > print id(mylist) > > > There's nothing like "pass by value" or "pass by reference" in Python > (and you'll notice I didn't claimed anything about this - just that the > 'argument passing scheme' was the same for all objects). > > What we call "variables" in Python are name=>object bindings. When > passing a "variable" to a function, the reference to the objet is bound > to the name of the argument in the function's namespace. So the *name* > is local to the function (hence rebinding the name to another objet > doesn't impact the name=>object binding in the caller's namespace), but > this name really refers to the same object (Python doesn't copy anything > unless explicitely told to do so). > > HTH
I realize I may be beating a dead horse here... but... a = 2 fn(a) >>> 3 print a >>> 2 So in some cases the it is safe to assume that your variables to function will not change in other cases it is not.. but they are all the same... -- http://mail.python.org/mailman/listinfo/python-list