From 762773382a07cabef5d48dbb0499bdc86a0f63d3 Mon Sep 17 00:00:00 2001 From: codingFeng101 <3524962421@qq.com> Date: Fri, 3 Jul 2026 22:12:29 +0800 Subject: [PATCH] Keep SortedSet discard quiet after key changes --- src/sortedcontainers/sortedset.py | 6 +++++- tests/test_coverage_sortedset.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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)