Fix defect in __ixor__ which would get the wrong
answer if the input iterable had a duplicate element (two calls to toggle() reverse each other). Borrow the correct code from sets.py.
This commit is contained in:
parent
cba36bbe65
commit
e67420d72e
|
@ -266,16 +266,6 @@ class MutableSet(Set):
|
|||
self.discard(value)
|
||||
return value
|
||||
|
||||
def toggle(self, value):
|
||||
"""Return True if it was added, False if deleted."""
|
||||
# XXX This implementation is not thread-safe
|
||||
if value in self:
|
||||
self.discard(value)
|
||||
return False
|
||||
else:
|
||||
self.add(value)
|
||||
return True
|
||||
|
||||
def clear(self):
|
||||
"""This is slow (creates N new iterators!) but effective."""
|
||||
try:
|
||||
|
@ -296,10 +286,13 @@ class MutableSet(Set):
|
|||
return self
|
||||
|
||||
def __ixor__(self, it):
|
||||
# This calls toggle(), so if that is overridded, we call the override
|
||||
if not isinstance(it, Set):
|
||||
it = self._from_iterable(it)
|
||||
for value in it:
|
||||
self.toggle(it)
|
||||
return self
|
||||
if value in self:
|
||||
self.discard(value)
|
||||
else:
|
||||
self.add(value)
|
||||
|
||||
def __isub__(self, it):
|
||||
for value in it:
|
||||
|
|
Loading…
Reference in New Issue