首页 > 解决方案 > 应用更改后如何比较相同的字典?(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

有没有更好的方法来解决我的问题?

标签: python

解决方案


也许您可以更改函数,因此它不能就地工作,而是返回新实例:

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()

推荐阅读