Roy Smith wrote: > > OK, I've just read back over the whole thread. I'm really struggling to > understand what point you're trying to make. I started out by saying: > > > Use a list when you need an ordered collection which is mutable (i.e. > > can be altered after being created). Use a tuple when you need an > > immutable list (such as for a dictionary key). > > To which you obviously objected. So now you write: > > > I think a tuple is an immutable sequence of items, and a list is a > > mutable sequence of items. > > So how is that different from what I said? Is this whole argument > boiling down to your use of "immutable sequence" vs. my use of > "immutable list"?
''' Roy: > Use a list when you need an ordered collection which is mutable (i.e. > can be altered after being created). Use a tuple when you need an > immutable list (such as for a dictionary key). Steven: I keep hearing about this last one, but I wonder... who *actually* does this? I've created many, many lists over the years -- lists of names, lists of phone numbers, lists of directory search paths, all sorts of things. I've never needed to use one as a dictionary key. ''' To me this is more of a question than an argument. Now moving on to your specific example. ''' def extract_stack(lines): "in traceback_helper module " header = lines[0] stack = [] for line in lines: m = frame_pattern.match(line) if not m: continue frame = (m.group('path'), m.group('function')) stack.append(frame) # [Convert to tuple and return after finished building stack.] return (header, stack) [...] def main(args): crashes = {} [...] for line in open(log_file): if does_not_look_like_a_stack_dump(line): continue lines = traceback_helper.unfold(line) header, stack = traceback_helper.extract_stack(lines) signature = tuple(stack) if signature in crashes: count, header = crashes[signature] crashes[signature] = (count + 1, header) else: crashes[signature] = (1, header) ''' Seems to me that Steven is suggesting that stack (after being built) should converted to a tuple before being returned, because a "stack" for any unique exception should be unique and immutable. You do this anyway; you just do it before putting it into a dictionary rather than before returning it. Same net effect (as long as you do not modify `stack` later), so no real argument. ~Ramit This email is confidential and subject to important disclaimers and conditions including on offers for the purchase or sale of securities, accuracy and completeness of information, viruses, confidentiality, legal privilege, and legal entity disclaimers, available at http://www.jpmorgan.com/pages/disclosures/email. -- http://mail.python.org/mailman/listinfo/python-list