On Thu, 19 Apr 2007 17:40:27 -0400, John Bauman wrote: > Adam Atlas wrote: >> On Apr 19, 5:24 pm, Bill Jackson <[EMAIL PROTECTED]> wrote: >>> I have a dictionary of dictionaries where the keys are typically very >>> long tuples and repeated in each inner dictionary. The dictionary >>> representation is nice because it handles sparseness well...and it is >>> nice to be able to look up values based on a string rather than a >>> number. However, since my keys are quite long, I worry that I am >>> wasting a lot of memory. >> >> I wouldn't worry about it. Try doing hash('string_2') in the >> interpreter -- the output thereof is what's really being used as the >> key. It doesn't use up any more memory than the integer 2. >> > Are you sure about that? Most dictionaries need to store the actual key, > in case of a collision, so when you lookup a key they can tell which > you're really looking for.
The key is already stored, so long as the string 'string_2' exists. And it will continue to exist so long as the dictionary includes it as a key. An extra copy isn't made (unless you make an extra copy yourself). In other words, the dictionary stores a reference to the string, not a copy of it: >>> s = "this is a long string" >>> d = {s: 1} >>> id(s) -1209073840 >>> id(d.keys()[0]) -1209073840 -- Steven. -- http://mail.python.org/mailman/listinfo/python-list