From fcf5c3312342602637bd93a0954048d92b5d15d4 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 11 Jan 2024 13:27:04 +0100 Subject: [PATCH 1/2] Make Comparator check for identity --- param/parameterized.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/param/parameterized.py b/param/parameterized.py index dd8ecdd15..db908cfa4 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1710,6 +1710,8 @@ class Comparator: @classmethod def is_equal(cls, obj1, obj2): + if obj1 is obj2: + return True for eq_type, eq in cls.equalities.items(): try: are_instances = isinstance(obj1, eq_type) and isinstance(obj2, eq_type) From da8806a270ac5da93eaf0d2c4c02196b3e0ad1ca Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Thu, 11 Jan 2024 13:43:22 +0100 Subject: [PATCH 2/2] Update tests --- param/parameterized.py | 4 ++-- tests/testwatch.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/param/parameterized.py b/param/parameterized.py index db908cfa4..832600564 100644 --- a/param/parameterized.py +++ b/param/parameterized.py @@ -1710,8 +1710,6 @@ class Comparator: @classmethod def is_equal(cls, obj1, obj2): - if obj1 is obj2: - return True for eq_type, eq in cls.equalities.items(): try: are_instances = isinstance(obj1, eq_type) and isinstance(obj2, eq_type) @@ -2058,6 +2056,8 @@ def _changed(cls, event): Predicate that determines whether a Event object has actually changed such that old != new. """ + if event.old is event.new: + return False return not Comparator.is_equal(event.old, event.new) def _instantiate_param(self_, param_obj, dict_=None, key=None, deepcopy=True): diff --git a/tests/testwatch.py b/tests/testwatch.py index e0708a976..e79b955c3 100644 --- a/tests/testwatch.py +++ b/tests/testwatch.py @@ -183,7 +183,7 @@ def accumulator(change): obj.a = 1 self.assertEqual(self.accumulator, 1) - def test_triggered_when_unchanged_complex_type(self): + def test_untriggered_when_unchanged_complex_type(self): def accumulator(change): self.accumulator += 1 @@ -193,7 +193,7 @@ def accumulator(change): obj.a = subobj self.assertEqual(self.accumulator, 1) obj.a = subobj - self.assertEqual(self.accumulator, 2) + self.assertEqual(self.accumulator, 1) def test_triggered_when_unchanged_if_not_onlychanged(self): accumulator = Accumulator()