'Iterate over each of the disjoint sets as a list.
The iterator is invalid if interleaved with calls to join().'

def __iter__(self):

    self.clean()
    token = object()
    for group in six.itervalues(self._mapping):
        if (group[(-1)] is not token):
            (yield [x() for x in group])
            group.append(token)
    for group in six.itervalues(self._mapping):
        if (group[(-1)] is token):
            del group[(-1)]
