Help understanding the decisions *behind* python?

Masklinn masklinn at masklinn.net
Fri Jul 31 15:31:21 EDT 2009


On 31 Jul 2009, at 20:48 , Emmanuel Surleau wrote:
> On Friday 31 July 2009 19:49:04 Raymond Hettinger wrote:
>> On Jul 20, 9:27 am, Phillip B Oldham <phillip.old... at gmail.com>  
>> wrote:
>>> Specifically the "differences" between lists and tuples have us
>>> confused and have caused many "discussions" in the office. We
>>> understand that lists are mutable and tuples are not, but we're a
>>> little lost as to why the two were kept separate from the start.  
>>> They
>>> both perform a very similar job as far as we can tell.
>>
>> The underlying C code for the two is substantially the same.  In  
>> terms
>> of code, tuples are in effect just immutable lists that have the
>> added
>> feature of being hashable (and therefore usable as dictionary keys or
>> elements of sets).
>>
>> Beyond the mutable/hashable distinction, there is an important
>> philosophical distinction articulated by Guido.  He deems tuples
>> to be useful for struct like groupings of non-homogenous fields
>> and lists to be useful for sequences of homogenous data suitable
>> for looping.
>>
>> While nothing in the list/tuple code requires you to make that
>> distinction,
>> it is important because that philosophy pervades the language.  If  
>> you
>> follow Guido's direction, you'll find that the various parts of the
>> language fit together better.  Do otherwise and you'll be going
>> against
>> the grain.
>
> I might be wrong, but I get the impression that many people don't  
> indeed "get
> it" and use tuples as static arrays and lists when the array needs  
> to be
> dynamically resized. This is certainly how I use them as well.
>
> This would tend to show that Guido's notion here was not particularly
> intuitive.
It's intuitive if you come to Python knowing other languages with  
tuples (which are mostly functional, and in which tuples are *never*  
sequences/iterables). At the end of the day, and if Guido's intention  
truly was what Raymond says, implementing tuples as immutable sequence  
was a mistake. And the documentation is to blame as well: in it,  
tuples are clearly described as a *sequence* type, not a *structure*  
type. 



More information about the Python-list mailing list