Pass by reference?
jmg at ecs.soton.ac.uk
Thu May 25 12:09:28 CEST 2000
Dale Strickland-Clark wrote:
> Also the following program proves to me that arguments are passed by value
> and not by reference:
No, it doesn't, but I agree that if you do not keep in mind exactly what `='
does in Python, then you are likely to think so.
> def wibble(var):
> var = 1
> x = 0
> print x
> It prints 0 showing that the assignment in wibble is made to a copy of x
> So - how do I pass a variable to a function/subroutine/method by reference?
> Thanks for any insight into this.
The deal is approximately this: Each time you use `=', the variable on the left
becomes a reference to whatever appears on the right. Function argument passing
is done by the same mechanism.
So, in your example, when x is passed to wibble(), wibble's var becomes a
reference to x. Then, when you assign 1 to var, var becomes a reference to 1.
Remeber that Python objects can be classed as mutable or immutable. Try passing
a mutable object to wibble, and mutating it in place (as opposed to
re-assigning it) and you will find that the argument really is passed by
def wibble( mutable ):
mutable = 5
x = 
wibble( x )
Now, change the body of wibble() to mutable =  and you will find that x
Make sense ?
More information about the Python-list