From 85257593473cf65a1ecc7962b1132f41904ed991 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Fri, 15 Dec 2023 15:31:50 +0100 Subject: [PATCH] Do no update objects inplace unless explicitly requested (#6055) --- panel/pane/base.py | 17 +++-------------- panel/tests/test_param.py | 10 +++++----- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/panel/pane/base.py b/panel/pane/base.py index 357505177b..0cb22bf135 100644 --- a/panel/pane/base.py +++ b/panel/pane/base.py @@ -682,20 +682,9 @@ def _update_from_object(cls, object: Any, old_object: Any, was_internal: bool, i old_object.object = object else: # Replace pane entirely - pane = panel(object, **{k: v for k, v in kwargs.items() - if k in pane_type.param}) - if pane is object: - # If all watchers on the object are internal watchers - # we can make a clone of the object and update this - # clone going forward, otherwise we have replace the - # model entirely which is more expensive. - if not (custom_watchers or links): - pane = object.clone() - internal = True - else: - internal = False - else: - internal = object is not old_object + pane_params = {k: v for k, v in kwargs.items() if k in pane_type.param} + pane = panel(object, **pane_params) + internal = pane is not object return pane, internal def _update_inner(self, new_object: Any) -> None: diff --git a/panel/tests/test_param.py b/panel/tests/test_param.py index c2285f849f..3fd39574a9 100644 --- a/panel/tests/test_param.py +++ b/panel/tests/test_param.py @@ -1315,20 +1315,20 @@ def view(a): pane = panel(view) inner_pane = pane._pane - assert inner_pane is not objs[0] + assert inner_pane is objs[0] assert inner_pane.object is objs[0].object - assert pane._internal + assert not pane._internal test.a = 1 - assert pane._pane is inner_pane - assert pane._internal + assert pane._pane is not inner_pane + assert not pane._internal objs[0].param.watch(print, ['object']) test.a = 0 - assert pane._pane is not inner_pane + assert pane._pane is inner_pane assert not pane._internal