深度复制浅表复制和列表理解之间的区别

时间:2020-04-18 14:31:23

标签: python multidimensional-array dynamic-programming

我正在使用动态编程来解决minCostpath问题

import copy
a = [
  [1,3,1],
  [1,5,1],
  [4,2,1],
]

# dp = [[0 for x in range(len(a[0]))] for x in range(len(a))] #Method 1
dp = copy.copy(a) #Method 2

for i in range(len(a)):
    print(a[i])

for i in range(len(a)):
    print(dp[i])

for i in range(len(a)):
    for j in range(len(a[0])):
#         dp[i][j] += a[i][j] #Uncomment this if using method 1 
        if (i > 0 and j > 0):
            dp[i][j] += min(dp[i-1][j],dp[i][j-1])
        elif i > 0:
            dp[i][j] += dp[i-1][j]
        elif j > 0:
            dp[i][j] += dp[i][j - 1]
#     print(a[i])
#     print(dp[i])
print('After finding minCost')
for i in range(len(a)):
    print(a[i])

for i in range(len(a)):
    print(dp[i])

当我同时使用这两种方法时,我得到了正确的答案,但是当使用深度复制方法时,网格数组被更改了。 谁能告诉我为什么吗?

1 个答案:

答案 0 :(得分:0)

您已经导入了副本库,则可以使用deepcopy()方法。

dp = copy.deepcopy(a) #Method 2

对我有用!