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)
 
    

