@qw1klyy

Почему меняется вся матрица?

Я хочу поменять 1-ый вложенный список, но в итоге каким-то магическим образом меняется все вложенные списки, почему это происходит?
h=[[1,2,2],[3,8,2],[5,3,5]]
dp=[[0]*(len(h[0]))]*(len(h))
for i in range(len(dp)):
    for j in range(len(dp[i])):
        if i == 0:
            if j==len(dp[i])-1:
                dp[i][j]=max(dp[i][j-1],(abs(h[i][j]-h[i+1][j])))
            if j==0:
                dp[i][j]=min(abs(h[i][j]-h[i+1][j]),abs(h[i][j]-h[i][j+1]))
            elif j > 0 and j<len(dp[i])-1:
                dp[i][j]=max(dp[i][j-1], min(abs(h[i][j]-h[i+1][j]),abs(h[i][j]-h[i][j+1])))
print(dp)

Жду возврат [[1,1,1],[0,0,0],[0,0,0]], но получаю [[1,1,1],[1,1,1],[1,1,1]]

UPD: изменил создание dp с [[0]*(len(h[0]))]*(len(h)) на
dp = []
l=[]
for i in range(len(h)):
for j in range(len(h[i])):
l.append(0)
dp.append(l)
l=[]
Похоже, дело заключалось в ссылочной работе списков в пайтон.
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Потому что в переменной dp ссылка не на матрицу из нолей, а на матрицу ссылок на один единственный ноль. Описано в каждом учебнике по Python, который мне встречался.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы