I'm implementing a DFS algorithm and I want to create a list of dictionaries. But I found that if I use [dict()] * n
, I got unexpected result.
I'm not sure what is the difference between "[dict()] * n
" and a "for
loop with .append(dict())
".
Any hint is appreciated.
def DFS1(nums, level, target, dp):
if level == len(nums):
if target == 0:
return 1
else:
return 0
if target in dp[level]:
return dp[level][target]
cnt1 = DFS1(nums, level + 1, target + nums[level], dp)
cnt2 = DFS1(nums, level + 1, target - nums[level], dp)
dp[level][target] = cnt1 + cnt2
return cnt1 + cnt2
test code is:
nums = [1,1,1,1,1]
n = len(nums)
target = -3
#dp = [dict()] * n #<== This does not work as expected
dp = []
for i in range(0, n):
dp.append(dict())
resCnt = DFS1(nums, 0, target, dp)
print(resCnt)