Atom uses custom containers to implement type validation and notifications. It implements two list subclasses and one dictionary subclass to this effect.
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
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 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.