Explaining how this simple example works gets into a number of interesting implementation issues.
The root object is a persistent object – a dictionary. When the “myobj” key is added, the object is marked as changed. When the transaction commits, a new data record will be written for the root object.
When the data record is written, a reference to a new persistent object is noted. The new object (obj) is assigned a data manager and the DM assigns an oid. Then a new record is written for this object.
When the transaction commits, any other object referencing the root object will receive an invalidation notice. At its next transaction boundary, it will update the object to its new state. It may also raise a ConflictError.