Issue 8750: Fixed MutableSet's methods to correctly handle reflexive operations, namely x -= x and x ^= x

This commit is contained in:
Daniel Stutzbach 2010-08-24 20:49:57 +00:00
parent d8e5f2df68
commit 31da5b2f69
3 changed files with 33 additions and 9 deletions

View file

@ -321,18 +321,24 @@ class MutableSet(Set):
return self
def __ixor__(self, it: Iterable):
if not isinstance(it, Set):
it = self._from_iterable(it)
for value in it:
if value in self:
self.discard(value)
else:
self.add(value)
if it is self:
self.clear()
else:
if not isinstance(it, Set):
it = self._from_iterable(it)
for value in it:
if value in self:
self.discard(value)
else:
self.add(value)
return self
def __isub__(self, it: Iterable):
for value in it:
self.discard(value)
if it is self:
self.clear()
else:
for value in it:
self.discard(value)
return self
MutableSet.register(set)