Python函数没有从内存中清除dict变量

问题描述

我正在尝试实现一个简单的动态编程函数,给定一个硬币类型列表和一个整数数量,计算制作一个硬币所需的最小硬币数量给定的金额。例如硬币 = [1,2,5];对于 5 + 5 + 1 种硬币类型的可能性,amount = 11 给出了 3 的输出

实现以下代码(如果没有找到匹配则输出-1):


def coinChange(coins,amount,dp = {}):
        
    if amount in dp:
        print('from mem',dp)
        return dp[amount]

    dp[0] = 0
    for c in coins:
        dp[c] = 1

    chk = [(amount - i) for i in coins if (amount-i) > 0]
    out = list(map(lambda x:coinChange(coins,x,dp),chk))
    out2 = [i for i in out if i >= 0]
    print(amount,chk,out,out2,dp)
    if out2:
        dp[amount] = 1 + min(out2)
    else:
        dp[amount] = -1

    return dp[amount]

调用这个函数时,第一次调用给出了预期的完整代码运行。但是,后续调用会引用该函数的原始 dp 变量并从中返回值。

我知道这个变量 dp 应该在函数退出后内存不足。请帮助理解。

输入: ''' c = [1,5] 一 = 11 coinChange(c,a) '''

第一次调用: 所有递归调用的正常输出

第二次调用输出: 从内存 {0: 0,1: 1,2: 1,5: 1,3: 2,4: 2,6: 2,7: 2,8: 3,9: 3,10: 2,11: 3 } 3

解决方法

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

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

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