前景提要
今天在做动态规划的时候创建二维列表的时候发现了一个疑问, 代码如下 def func(N, total_weight): weight = [1, 2, 3, 4] value = [2, 4, 4, 5] dp = [[0 for i in range(total_weight+1)] for j in range(N+1)] print(dp) # dp = [[0] * (total_weight + 1)] * (N+1) # print(dp) for i in range(1, N + 1): for j in range(1, total_weight + 1): if j >= weight[i - 1]: value1 = dp[i - 1][j - weight[i - 1]] + value[i - 1] dp[i][j] = max(value1, dp[i - 1][j]) else: dp[i][j] = dp[i - 1][j] return dp func(4, 6)
dp = [[0 for i in range(total_weight+1)] for j in range(N+1)] 创建的列表和 dp = [[0] * (total_weight + 1)] * (N+1)创建的列表完全相同, 但是最后两者得到的结果完全不同, 前者使用 for 循环得到的结果最后是正确的, 为什么会这样呢???
for 循环得到的列表值: [[0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2], [0, 2, 4, 6, 6, 6, 6], [0, 2, 4, 6, 6, 8, 10], [0, 2, 4, 6, 6, 8, 10]]
直接乘号得到的列表值: [[0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12], [0, 2, 4, 6, 8, 10, 12]]