Totally Confused: Passing variables to functions
dique
chezdique at yahoo.com
Thu Jun 5 10:43:01 EDT 2003
to see why: compare the following two cases
def blah(arg):
arg.append(3)
v = [1,2]
blah(v)
then v becomes [1,2,3]
def blah(arg):
arg = arg + [3]
v = [1,2]
blah(v)
then v still is [1,2]
Chuck <cdreward at riaa.com> wrote in message news:<m6ptdvg3p8dvcbpg7qhelb7s2i0slrk7b0 at 4ax.com>...
> I've hit a stumbling block while trying to pick up Python. I've googled
> around, and I don't think I'm the first to have this question, but I haven't
> been able to find an answer that explains things for me.
>
> def blah(arg):
> arg.append(3)
>
> v = [1,2]
>
> blah(v)
>
> ... This gives me the impression that Python passes variables by reference (by
> a "pointer"), and the "arg" in blah is the same as "v".
>
> But it's not, because if I say "arg = None" inside the function, "v" is
> unchanged.
>
> Also, if I do something similar:
>
> def blah(arg):
> arg = arg + 1
>
> v = 1
>
> blah(v)
>
> I get the impression Python passes variables by copy.
>
> *Huh?*
>
> It seems that if you pass a mutable variable, you can change it, but only by
> using it's methods, ie arg.append(), and NOT by doing an "arg = (new value)".
>
> And if you pass an immutable variable, you can't change it at all.
>
> This doesn't seem very intuitive, which leads me to believe I'm missing "the
> big picture".
>
> In the python tutorial, it says:
>
> Actually, call by object reference would be a better description,
> since if a mutable object is passed, the caller will see any changes
> the callee makes to it (items inserted into a list).
>
> But I don't understand what "object reference" means. I'm familiar with "pass
> by copy" and "by reference(pointer)" in the Pascal or C languages...
>
> What's going on? (*grin*)
>
>
> Thanks!
More information about the Python-list
mailing list