Paul McGuire wrote: > Since tuples are immutable, I think of them as fixed data objects with > some simple sequential structure, as opposed to lists which are much > more dynamically accessible/updateable data containers. Back in my > relational database design days, I sometimes had to create a primary > key for a table by combining values stored in two or more columns - > neither column value alone was unique, but the combination of them > was, and so made a good retrieval index. In Python, such data pairs > would be ideally represented with tuples, in support of in-memory data > cacheing or tree indexing - for a given record, the values don't > change, so the immutability of their tupleness doesn't get in the way. > > In similar vein, I've used tuples internally in my Python code as > cache keys for function memoizing. They are WORM structures - write > once, read many - built to represent the cache value, but never > updated.
> With this idea of tuples as a data structure, I could reasonably > interpret this: > > (1,"abc",3) + [1] > > to result in (1,"abc",3,[1]) just as well as (1,"abc",3,1). But > instead of just picking one, Python complains about this, and so > forces me to explicitly use > > (1,"abc",3) + tuple([1]) > > or > > (1,"abc",3) + ([1],) > > I don't think tuples are just an academic curiosity, as your post > seems to suggest. > > -- Paul Were lists implemented as efficiently as tuples in terms of memory and speed, there would be no difference except the academic one--which is perhaps important. Actually, I must admit that I use them and their implicit meanings all the time in my code (as proof, notice in the "any way to create a table-like object?" thread how I specify column headers--its for a reason I use tuple in the example because the resulting data structures will be ordered according to the tuple passed--of course, I refuse to enforce this via "ugly and boring" type checking). For the most part, I ignore the implementation differences and draw the distinction at their semantics. Also, risking getting a reputation for being overly contentious, I think your argument falls apart in the latter half of your post because "+", as far as I can tell with python sequences, is used to mean catenate exclusively and not append, which is what you suggest as a possibility. Anyway, D'Arpano made an excellent point with a good mind-reading example and so I understand the design decision regarding catenation of tuples and lists more clearly now. I'm still not sure I like it, but there is no accounting for taste. James -- http://mail.python.org/mailman/listinfo/python-list