[Edu-sig] Fwd: How does Python do Pointers?
Anna Ravenscroft
annaraven at gmail.com
Sun May 4 23:47:10 CEST 2008
Martelli's response. ;-)
---------- Forwarded message ----------
From: Alex Martelli <aleaxit at gmail.com>
Date: Sun, May 4, 2008 at 2:36 PM
Subject: Re: [Edu-sig] How does Python do Pointers?
To: Anna Ravenscroft <annaraven at gmail.com>
Cc: edu-sig at python.org
With thanks to Anna for forwarding this...
> From: David MacQuigg <macquigg at ece.arizona.edu>
...
> Note that Martelli says "all argument passing in Python is by value"
> (Python in a Nutshell, p.74), but I think this may be an error.
Taken completely out of context, it might well be, because of the
connotations often carried by the "by value" tag; if you however read
the whole paragraph (just six short lines) you'll also see "Python
passes the object itself, not a copy" which should abundantly suffice
to dispel the mistaken belief that "by value means a copy".
Within six short lines, I can't cover all the permutations and nuances
that might best teach this issue to students coming from many
different languages. Somebody coming from Java (perhaps the most
popular first-language these days) has the least need for
clarification, as I might basically say "it's just like in Java"
(perhaps adding "without the complications and exceptions whereby e.g.
int values appear to be treated differently";-). See for example
http://javadude.com/articles/passbyvalue.htm -- "Java is
Pass-by-Value, Dammit!" by Scott Stanchfield -- I do agree with the
"Dammit!" part at least;-). A similar position is expounded at
http://www.javaranch.com/campfire/StoryPassBy.jsp .
Somebody coming from Fortran or Basic (still surprisingly popular
first-languages, even though dated) needs most hand-holding, because
they're used to think in terms of "passing a variable" rather than
"passing a value".
C of course is thoroughly by-value BUT with the added twist of an
implied copy at each argument-passing (or assignment -- identical
semantics to argument passing of course). (Scott would disagree as he
claims that by-value MEANS copy -- but he also says Java has pointers,
"Dog d;" declares a POINTER to a Dog, etc...). To somebody knowing
only C, I might explain that "everything in Python is a pointer" (on
which you however cannot perform pointer-arithmetic), much like the
above Java articles explain things (but without the need to mention
'int' as somehow distinguished); or I might say a bit more precisely
that every NAME is a pointer, and also ITEMS in containers are
pointers. So argument passing (and assignment) most definitely ARE by
value -- but of course, value of the POINTERS (_those_ pointers get
copied around -- but the copy of a pointer points to the same object
as the original pointer!), because that's what names always are in
Python.
Alex
--
cordially,
Anna
--
Walking through the water. Trying to get across.
Just like everybody else.
More information about the Edu-sig
mailing list