Atom’s containers
Atom uses custom containers to implement type validation and notifications. It implements two list subclasses and one dictionary subclass to this effect.
Note
Currently the typed validated dictionary is not a subclass of the Python
builtin dictionary type. This can cause some unexpected issues in
particular when assigning the value stored in a Dict
member to another
Dict
which will fail. To circumvent this issue one should call dict
on the content of the first member.
This is a known problem and will be fixed in a future version of atom.
Usually, users should not instantiate those containers manually, in particular because they need a reference to both the member and the instance to which they are tied.
Atom provides however an alternative mapping type which uses less memory than
a regular dictionary in particular when the mapping contain only few objects:
sortedmap
.
sortedmap
sortedmap
can be imported from atom.datastructures.api
. Contrary to a
regular Python dictionary, sortedmap
does not requires the keys to be
hashable, however they should be sortable. sortedmap
will fall back on the
Python 2 behavior to order any Python object based on the class name and the
object id if two objects cannot be compared otherwise.
In terms of memory efficiency, here is a quick comparison: +————-+————-+—————+ | | dict | sortedmap | +=============+=============+===============+ | empty | 240 | 72 | +————-+————-+—————+ | 1 key | 240 | 88 | +————-+————-+—————+ | 2 key | 240 | 104 | +————-+————-+—————+ | 100 key | 4704 | 2120 | +————-+————-+—————+
sortedmap
is not meant to replace dictionaries but can be valuable
when a large number of small containers is necessary.