At the moment, `self.items` is a plain dictionary.
A `PersistentDict` would be better, so that changes to it are automatically noticed.
Also, if I understand correctly, primitive attributes are stored as part of their parent object, so if `self.items` changes, a new copy of self is stored, instead of just items, or indeed just the changed item.
It would be even better to use annotations:
http://plone.org/products/dexterity/documentation/manual/five.grok/core-components/annotations
This would save just the changed item.
I see that `fields/base.py` already uses annotations, so it's probably just a matter of priorities to make `self.items` use it too. If so, do you have an idea when it will be done? If there are no catches (i.e. it's as simple as the code in `base.py`) I'll give it a try if I have some time.
There would have to be a migration step.