diff --git a/src/sortedcontainers/sortedset.py b/src/sortedcontainers/sortedset.py index f2416bf..58277ad 100644 --- a/src/sortedcontainers/sortedset.py +++ b/src/sortedcontainers/sortedset.py @@ -394,7 +394,11 @@ def discard(self, value): _set = self._set if value in _set: _set.remove(value) - self._list.remove(value) + try: + self._list.remove(value) + except ValueError: + self._list.clear() + self._list.update(_set) _discard = discard diff --git a/tests/test_coverage_sortedset.py b/tests/test_coverage_sortedset.py index c432a3f..b08b4db 100644 --- a/tests/test_coverage_sortedset.py +++ b/tests/test_coverage_sortedset.py @@ -360,6 +360,16 @@ def test_discard(): assert len(temp) == 97 +def test_discard_with_changed_key(): + keys = {value: value for value in range(5)} + temp = SortedSet(range(5), key=keys.__getitem__) + value = temp[-1] + keys[value] = -1 + temp.discard(value) + temp._check() + assert value not in temp + + def test_index(): temp = SortedSet(range(100)) temp._reset(7)