有没有办法在返回没有副作用的可变对象的同时使用 lru_cache ?

问题描述

当从 lru_cached 函数返回可变对象(例如 numpy.ndarray)时,对返回对象的任何更改 - 都会影响缓存对象。

这通常是有道理的,但也可能令人困惑。

看下面的例子

In [13]: from functools import lru_cache
    ...: import numpy as np
    ...:
    ...:
    ...: @lru_cache
    ...: def cached_function(param):
    ...:     print(f"running cached_function on: {param}")
    ...:     return np.array([param])
    ...:
    ...:
    ...: for number in [100,200,100]:
    ...:     res = cached_function(number)
    ...:     res *= 5
    ...:     print(res)
    ...:
running cached_function on: 100
[500]
running cached_function on: 200
[1000]
[2500]

无论如何使用lru_cache(或类似的)没有这种副作用?

是否应该避免从缓存函数返回可变对象?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...