Разница между глубокой копией мелкой копией и пониманием списка - PullRequest
0 голосов
/ 18 апреля 2020

Я работаю над проблемой minCostpath, используя динамическое c программирование

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 голосов
/ 18 апреля 2020

Поскольку вы уже импортировали библиотеку копирования, вы можете использовать метод deepcopy ().

dp = copy.deepcopy(a) #Method 2

Это сработало для меня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...