If your items within the list themselves inherit from persistent.Persistent , they will load on demand.
Primitive types and classes that are not inherited from Persistent , however, are loaded into memory along with an instance of PersistentList.
PersistentList is basically a subclass of UserList (and Persistent ) that sets self._p_changed on change, so the change to the list is translated into a ZODB commit for writing.
source share