微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。