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.