Reference or Value?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Feb 24 04:36:51 EST 2009


En Tue, 24 Feb 2009 06:44:01 -0200, andrew cooke <andrew at acooke.org>  
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.

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