python - 函数调用后Python字典不清除
问题描述
我有以下代码,它检查是否可以使用给定的数字列表来实现目标总和。我试图通过将值存储在字典中来记忆函数。
def how_Sum(target_Sum, numbers, memo={}):
if target_Sum in memo:
return memo[target_Sum]
if target_Sum == 0:
return []
if target_Sum < 0:
return None
for num in numbers:
remainder = target_Sum - num
remainder_Result = how_Sum(remainder, numbers, memo)
if remainder_Result != None:
memo[target_Sum] = remainder_Result + [num]
print(memo)
return memo[target_Sum]
memo[target_Sum] = None
return None
现在当我这样调用函数时,我得到以下正确的结果。
print(how_Sum(7, [2, 3]))
得到我,
{1: None, 3: [3]}
{1: None, 3: [3], 5: [3, 2]}
{1: None, 3: [3], 5: [3, 2], 7: [3, 2, 2]}
[3, 2, 2]
当我调用这个函数时,print(how_Sum(7, [5, 3, 4])
我得到以下也是正确的,
{2: None, 1: None, 4: [4]}
{2: None, 1: None, 4: [4], 7: [4, 3]}
[4, 3]
现在,当我同时运行它们时,
print(how_Sum(7, [2, 3]))
print(how_Sum(7, [5, 3, 4]))
我得到这个结果,
{1: None, 3: [3]}
{1: None, 3: [3], 5: [3, 2]}
{1: None, 3: [3], 5: [3, 2], 7: [3, 2, 2]}
[3, 2, 2]
[3, 2, 2]
现在根据我的理解,字典是为第一个函数创建的,并且不会为第二个调用清除。有人能解释一下为什么会这样,以及如何纠正吗?
解决方案
推荐阅读
- c# - 数据网格文本框值未使用 ObservableCollection 更新
- python-3.x - 如何在不阻塞整个应用程序的情况下读取单个击键?
- javascript - 地理数据解决方案下拉生成器的问题
- r - Rdieharder 文本文件作为输入
- blockchain - Corda Vault 查询(Java 代码)需要什么导入
- java - 使用 Arraylist 在 Java 中创建登录系统
- angular - setInterval 后调用函数
- sas - 如何从 Atom 代码编辑器在 SAS Base 中运行代码
- typescript - 如何正确索引和修改通用部分
- css - 如何在组件刷新时添加 LinkedIn Badge DOM 更改代码