跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于创建列表方式的一个疑问
未分類
19 7 月 2020

关于创建列表方式的一个疑问

关于创建列表方式的一个疑问

資深大佬 : 18870715400 9

今天在做动态规划的时候创建二维列表的时候发现了一个疑问, 代码如下

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]]

大佬有話說 (2)

  • 資深大佬 : pwli

    后者是浅拷贝,也就是说列表内的元素(另一个列表)指向同一个地址

  • 主 資深大佬 : 18870715400

    @pwli 刚尝试了一下, 的确是这样, 谢谢!

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具