Totally Confused: Passing variables to functions
Steve Horsley
steve.horsley at cwcom.cwplc.com
Fri Jun 6 12:34:27 EDT 2003
Chuck <cdreward at riaa.com> wrote in message news:<i39udvo7e11828rkmudo93hj3dr68bft95 at 4ax.com>...
>
> > >>> v = [1,2]
> > >>> arg = v
> > >>> arg.append(3)
> > >>> v
> > [1, 2, 3]
>
> I'm not "getting" variables in Python, then.
>
> What exactly happens when I say "arg = v"?
>
> Not "arg is assigned the value [1,2] that v happens to hold"...
>
> Not "arg now points to v" (can't be, since you can delete v and arg still
> exists)
>
> It seems to say, "arg now points to what v also points to".. is this correct?
>
Spot on. Exactly. Except some people may prefer to say "refers to"
rather than saying "points to". The one list now has two references
to it.
> And so...
>
> a = 1
> b = a
>
> is really saying, "b points to what a points to, which is a 'variable' with
> the value of 1, which cannot be changed (immutable)".
>
> Is this correct?
>
Yes. In python, even the number 1 is a object - a number sort of object.
try:
>>> dir(1)
and see how many functions the number 1 has!
Then try (note the space before the dot):
>>> 1 .__hex__
<method-wrapper object at 0x007B5BD0>
>>> 1 .__hex__()
'0x1'
But the fact that numbers are objects is something of a diversion here.
Let's try this:
def foo(arg):
# This appends to the list that arg refers to
arg.append('three')
# make arg refer to something completely different
arg = 42
# make a list and a variable 'a' that refers to it
a = ['one', 'two']
# make a new variable 'b' and point it at the same
# list as that a refers to
b = a
# call foo, which will append to our list
# (and also fiddle with a different list of its own)
foo(b)
# remove one of the references to our list
del a
# remove the other reference to our list.
# Poof! the list gets garbage collected because no-one has a
# reference to it any more. It's gone and forgotten.
del b
> If so, I *think* I'm starting to "get it"... ;-)
>
I'm sure you are.
Steve
More information about the Python-list
mailing list