如何解决python中声明二维数组的语法区别
我尝试在 Python 中编写 0/1 Knapsack 动态编程自底向上方法。
我尝试过的代码:
def knapSack(W,wt,val,n):
matrix = [[0]*(W+1)]*(n+1)
print(matrix)
for i in range(n+1):
for j in range(W+1):
if i == 0 or j == 0:
matrix[i][j] = 0
elif wt[i-1] <= j:
matrix[i][j] = max(val[i-1]+matrix[i-1][j-wt[i-1]],matrix[i-1][j])
else:
matrix[i][j] = matrix[i-1][j]
return matrix[n][W]
def knapSack2(W,n):
t = [[0 for i in range(W+1)] for j in range(n+1)]
print(t)
for i in range(n+1):
for j in range(W+1):
if i == 0 or j == 0:
t[i][j] = 0
elif wt[i - 1] <= j:
t[i][j] = max(val[i-1] + t[i-1][j - wt[i-1]],t[i-1][j])
else:
t[i][j] = t[i-1][j]
return t[n][W]
n = 3
W = 4
wt = [1,2,3]
val = [4,5,1]
print(knapSack(W,n))
print(knapSack2(W,n))
我得到的输出是:
[[0,0],[0,0]]
16
[[0,0]]
9
问题:为什么除了声明之外,两个函数的代码完全相同,但输出结果却有所不同?
像这样,即使打印函数值相同,下面的声明也有区别吗?
matrix = [[0]*(W+1)]*(n+1)
matrix = [[0 for i in range(W+1)] for j in range(n+1)]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。