微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中声明二维数组的语法区别

如何解决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 举报,一经查实,本站将立刻删除。