Tim Peters wrote at 2004-5-30 14:49 -0400:
[Dieter Maurer]
I think, this is a ZODB buglet:
It should set "_p_changed = 0" before it calls "__setstate__" and not afterwards...
I don't know; Jim (or Jeremy) may know the reasoning here, but I don't.
Activation currently sets the state to changed *before* calling __setstate__ too. A comment says this is to prevent recursively calling _PyPersist_Load, and that makes sense to me, else unbounded recursion could occur.
I see...
... On ZODB head, Jeremy also documented that __setstate__ can't affect the persistent state (in persistent/interfaces.py's IPersistent). Whether this is deliberate design, or a consequence of the current implementation, I can't say.
A potential problem: it *can* change the persistent state but it does not do it reliably. It does precisely when the object is later modified again: in this case modifications made in "__setstate__" become persistent, otherwise, they do not. -- Dieter