Reference or Value?

andrew cooke andrew at
Tue Feb 24 10:58:08 CET 2009

Gabriel Genellina wrote:
> En Tue, 24 Feb 2009 06:44:01 -0200, andrew cooke <andrew at>
> escribió:
>> Steven D'Aprano wrote:
>>> On Mon, 23 Feb 2009 08:14:34 -0300, andrew cooke wrote:
>>>> Steven D'Aprano wrote:
>>>>> On Sun, 22 Feb 2009 13:37:27 -0300, andrew cooke wrote:
>>>>>> as far as i understand things, the best model is:
>>>>>> 1 - everything is an object
>>>>>> 2 - everything is passed by reference
>>>>> Except that is wrong. If it were true, you could do this:
>>>> [pointer swapping]
>>>> i was thinking of how the stack is used; i would have called what you
>>>> are talking about "pointer semantics".  however, on reading around a
>>>> little, it seems that i'm in a very small minority (which is a pity,
>>>> because if you restrict the meaning to how values are handled on the
>>>> stack then you get a lot closer to having just values and references,
>>>> rather than the whole pile of different terms that are apparently in
>>>> use).
>>>> sorry for the confusion,
>>> Why is it a pity to have a whole pile of different terms to describe a
>>> whole lot of different behaviours? I would suggest the real confusion
>>> would be if we had two terms to describe a dozen different parameter-
>>> passing conventions.
>> because:
>> (1) it's often useful to explain things as (simpler) orthogonal
>> components
>> rather than globbing everything under one term; that lets you more
>> easily
>> carry across knowledge from previous experience.
>> (2) while using a term that has (according to wikipedia) "widespread
>> usage
>> in the Python community" helps you save time and avoid confusion, it
>> doesn't necessarily explain best to someone from outside that community
>> what is happening.  in this particular case you are getting dangerously
>> close to having a term that is used only for one language and which,
>> therefore, is at risk of meaning little more that "the way python does
>> it"
>> (which is, i think you'll agree, more tautological than helpful).
> But -paraphrasing A.E.- we should explain it in the simplest terms, but
> not simpler.
> Some people think that there exist only two possible ways to pass an
> argument: by value or by reference. The way Python does it doesn't have
> the same properties that pass-by-value nor pass-by-reference have in other
> languages, so both names are inapropiate. You appear to favor the "by
> reference" name. A couple months ago some other guy were strongly
> defending the "by value" name -- he even set up a website supporting his
> idea.
> The fact is, if you say "it's by value" you'll disappoint some
> expectations from some users, and if you say "it's by reference" you'll
> disappoint some other expectations. So you must say something different
> ("it's by reference, but the references cannot be modified (!), and...",
> "it's by value, but the values are references (!!), and...", or whatever
> description you choose). Given that, it's better to use a different name:
> you're going to explain the concept anyway.

if you read my post i think you'll find i was not advocating either of those.

i really think this discussion has gone on far enough; i have better
things to do.


> And Python isn't the first language using this convention; if you look in
> the FAQ or search recent threads in this group you'll find references
> going back to the '70s.
> --
> Gabriel Genellina
> --

More information about the Python-list mailing list