Я хочу поменять 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=[]
Похоже, дело заключалось в ссылочной работе списков в пайтон.