Collections of non-arbitrary objects ?

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Fri Jun 29 05:37:31 EDT 2007


walterbyrd a écrit :
>> Did you try to sort a tuple ?
>>
>>  >>> (1, "aaa").sort()
>> Traceback (most recent call last):
>>    File "<stdin>", line 1, in ?
>> AttributeError: 'tuple' object has no attribute 'sort'
> 
> I can do this:
> 
>>>> x = (3,2,1)
>>>> x = tuple(sorted(list(x)))
 >
> Which, although senseless, effectively sorts the x tuple.

Err...

> But, you are
> right, I am not really sorting the tuple,

Indeed.

> I'm sorting a list, which
> has been made from the tuple, then changing it back to a tuple.

Exactly. You're in fact *creating* a new tuple - how you do it is 
somewhat irrelevant. This is certainly not the same thing as in-place 
sorting.

 From a purely practical POV, using tuples as "frozen lists" can 
sometimes make sens - be it for micro-optimization (tuples are cheaper 
than lists). But still, you'll find that in most cases(with most==almost 
always), tuples are used for (eventually heterogenous) data *where the 
order is significant* (fields in a db row, argument list, base classes 
lists, 2D or 3D points, etc), and can not be changed without changing 
the semantic of the data, while lists are used to collect (more or less) 
homogenous data where the order doesn't impact the semantic of the data 
(which is one of the reasons why list can be sorted and tuples cannot). 
As a matter of fact, a dict can be build from a list of (key,value) 
tuples - and it's obvious that the order of the elements in each tuple 
is significant, while the order of tuples in the list is not.

HTH





More information about the Python-list mailing list