diff --git a/reflex/vars/base.py b/reflex/vars/base.py index 2d15365c1e..c0c2f33057 100644 --- a/reflex/vars/base.py +++ b/reflex/vars/base.py @@ -3,6 +3,7 @@ from __future__ import annotations import contextlib +import copy import dataclasses import datetime import functools @@ -2146,7 +2147,7 @@ def _replace( "fget": kwargs.pop("fget", self._fget), "initial_value": kwargs.pop("initial_value", self._initial_value), "cache": kwargs.pop("cache", self._cache), - "deps": kwargs.pop("deps", self._static_deps), + "deps": kwargs.pop("deps", copy.copy(self._static_deps)), "auto_deps": kwargs.pop("auto_deps", self._auto_deps), "interval": kwargs.pop("interval", self._update_interval), "backend": kwargs.pop("backend", self._backend), diff --git a/tests/units/test_state.py b/tests/units/test_state.py index 1532502e6e..79cf2dec33 100644 --- a/tests/units/test_state.py +++ b/tests/units/test_state.py @@ -3916,3 +3916,22 @@ class OtherState(rx.State): other_state.data.append({"foo": "baz"}) assert "rows" in comp_state.dirty_vars + + +def test_computed_var_mutability() -> None: + class CvMixin(rx.State, mixin=True): + @rx.var(cache=True, deps=["hi"]) + def cv(self) -> int: + return 42 + + class FirstCvState(CvMixin, rx.State): + pass + + class SecondCvState(CvMixin, rx.State): + pass + + first_cv = FirstCvState.computed_vars["cv"] + second_cv = SecondCvState.computed_vars["cv"] + + assert first_cv is not second_cv + assert first_cv._static_deps is not second_cv._static_deps