In article <50a911ec$0$29978$c3e8da3$54964...@news.astraweb.com>, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote:
> Oh I'm sorry, did something I say suggest that the couple of examples I > gave are the *only* acceptable uses? My apologies for not giving an > exhaustive list of every possible use of lists and tuples, I'll be sure > to punish myself severely for the lapse. Hmmm. I didn't mean any offense. I was just pointing out that what's true in theory and what's true in practice aren't always the same. > Under what sort of circumstances would somebody want to take a mutable > list of data, say a list of email addresses, freeze it into a known > state, and use that frozen state as a key in a dict? I've got a script which trolls our log files looking for python stack dumps. For each dump it finds, it computes a signature (basically, a call sequence which led to the exception) and uses this signature as a dictionary key. Here's the relevant code (abstracted slightly for readability): 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) You can find traceback_helper at https://bitbucket.org/roysmith/python-tools/src/4f8118d175ed/logs/traceba ck_helper.py The stack that's returned is a list. It's inherently a list, per the classic definition: * It's variable length. Different stacks have different depths. * It's homogeneous. There's nothing particularly significant about each entry other than it's the next one in the stack. * It's mutable. I can build it up one item at a time as I discover them. * It's ordered. f1(f2()) is not the same as f2(f1()). But, to use it as a dictionary key, I need to make it into a tuple, since keys have to be immutable. -- http://mail.python.org/mailman/listinfo/python-list