[Edu-sig] Pass by Reference

David MacQuigg macquigg at ece.arizona.edu
Wed May 21 16:47:09 CEST 2008


At 06:35 PM 5/20/2008 -0700, Warren Sande wrote:

>Putting aside the "pass-by-X" question, a beginner asks:
>
>"If I  do    A = (something)   then   B = A    then I change A, does B also change?"
>
>And the answer, again, is "It depends."  For mutable types, yes, for immutable types, no.  And that's a sticky thing to get into for a beginner who is just learning what variables (names) are about.

At this point, I would immediately stop using vague words like "change", and try to find words with a more precise meaning, like "re-bind" and "modify".  "Re-assign" would be another possibility, but I see that "re-bind" is commonly used in Python texts.  Also, it is a less common word than re-assign, so less likely to have other meanings.  "Mutate" might be better than "modify" for the same reason.

Long before any discussion of parameter passing, students should have a firm grasp of how variables work in Python, including the concepts of mutability and rebinding.  This is the model and terminology I suggest: 

   variable:(name, pointer) --> object:(type, value, address)

Other than the word "value", I don't see any confusion with any of these terms.  I haven't heard any suggestions for a better simple model.

With this model in mind, the simple answer to the student's question is - "It depends on whether you are modifying the object of variable A, or re-binding A to some other object.

-- Dave






More information about the Edu-sig mailing list