python - 应用更改后如何比较相同的字典?(Python)
问题描述
我有一个问题,我有一个可能会或可能不会改变字典值的函数,我想用另一个函数跟踪这些变化。它看起来像这样:
dict_t0 = my_dict
function_that_alters_values(my_dict)
dict_t1 = my_dict
compare_dicts(dict_t0,dict_t1)
但是,由于dict_t0
只是指向 object my_dict
,因此所做的任何更改都my_dict
将应用于dict_t0
,这就是我尝试使用的原因
dict_t0 = deepcopy(my_dict)
但是,这给了我以下错误:
RecursionError: maximum recursion depth exceeded
有没有更好的方法来解决我的问题?
解决方案
也许您可以更改函数,因此它不能就地工作,而是返回新实例:
original = {1: [1, 2, 3], 2: [4, 5, 6]}
new = original
def squareValues(someDict):
return {k: [i**2 for i in v] for k, v in someDict.items()}
new = squareValues(new)
original
#{1: [1, 2, 3], 2: [4, 5, 6]}
new
#{1: [1, 4, 9], 2: [16, 25, 36]}
编辑
至于deepcopy
你可以增加递归限制:
sys.setrecursionlimit(5000) # or more if your structure is deeper.
要查看当前的递归限制,请使用:
sys.getrecursionlimit()
推荐阅读
- pine-script - TradingView Alerrt Message Question - (alertcondition 自定义消息问题)
- azure - 查看哪个用户将文件上传到 azure blob 存储容器
- ssl-certificate - Firefox 无法识别本地站点上的新 ssl 证书
- python - 如何在python中创建一个“计时器”?
- excel - 使用 VBA 在 PowerPoint 上自动调整图表 ListObject 的大小
- python - 最后一行的名称错误(它说 p 未定义)
- r - 如何在满足另一列中唯一值的条件时描述()一列?
- tabula - 谁能解释一下这个警告?
- apache-spark - Pyspark GroupBy 和计数太慢
- javascript - 一个长模块与多个短模块代码拆分