Victor Safronovich wrote at 2005-12-9 12:05 +0500: >Hello zodb-dev! > >Is this a correct behaviour? >>>> from BTrees.IIBTree import IIBTree >>>> t = IIBTree(map(None,range(5),range(5))) >>>> list(t.keys()) >[0, 1, 2, 3, 4] >>>> k = t.keys() >>>> list(k) >[0, 1, 2, 3, 4] >>>> del t[0] >>>> list(k) >[] > >BUT >>>> i = iter(t.keys()) >>>> del t[1] >>>> list(i) >[2, 3, 4]
Things like these are to be expected! The BTrees methods "keys", "values" and "items" are implemented as iterators. You should *NEVER* change the data structure being iterated over. If you do, funny things can happen -- not only with BTrees but with *ANY* iterator. E.g. l = range(10) for f in l: l.remove(f) l --> [1, 3, 5, 7, 9] Due to the much more complex BTree structures, the results of modifications during iteration might be even more surprising. -- Dieter _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org http://mail.zope.org/mailman/listinfo/zodb-dev