scared about refrences...

Steve Holden steve at holdenweb.com
Thu Nov 2 17:46:22 EST 2006


SpreadTooThin wrote:
> 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...
> 
You are!

> 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...
> 
Mutable values can be mutated. Immutable ones can't.

Please stop worrying and start enjoying Python. Once you have started 
cutting code you will wonder why you ever bothered to spend so much time 
on this issue.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb       http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list