Better dict of dicts

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Fri Apr 20 01:19:17 CEST 2007


On Thu, 19 Apr 2007 17:40:27 -0400, John Bauman wrote:

> Adam Atlas wrote:
>> On Apr 19, 5:24 pm, Bill Jackson <jack... at hotmail.com> 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.




More information about the Python-list mailing list