Python 3, an Illustrated Tour Transcripts
Chapter: Classes and inheritance
Lecture: Dictionary Key Sharing
Login or
purchase this course
to watch this video and the rest of the course contents.
0:01
In this video, I want to introduce an optimization that was brought to pass in PEP 412 Python 3.3. This is called key sharing dictionaries
0:11
and it's a nice little optimization that will save memory when you're using Python 3. From the PEP we read: key sharing allows dictionaries,
0:19
which are used as attribute dictionaries or the __dict__ attribute of an object
0:25
to share keys with other attribute dictionaries of instances of the same class. So let's just understand what that means.
0:32
Basically whenever you create a class in Python underneath the class there will be a __dict__ attribute
0:40
which will store the attribute names and map them to the values there. What happens is if you're creating a bunch instances of classes
0:47
that have a bunch of attributes, these attributes are typically strings and those strings will be repeated and so Python the interpreter
0:54
would go out and create a new string for each attribute and those strings could add up if you're creating thousands or many more instances of a class.
1:05
So this is a nice little optimization, what it does is it caches essentially the keys in a dictionary.
1:12
We also read from the PEP that as a result of this optimization
1:15
these dictionaries are typically half the size of the current dictionary implementation. Benchmarking shows that memory use is reduced
1:22
by 10 to 20 percent for object-oriented programs with no significant change in memory use for other programs.
1:29
So you don't have to do anything about this you get to take advantage of this automatically.
1:33
Also note that this optimization does not apply to dictionaries only to the __dict__ dictionary in an instance.