python创建全为0的二维列表遇到的坑 |
您所在的位置:网站首页 › python如何定义空二维列表 › python创建全为0的二维列表遇到的坑 |
本来想着简单点,用列表乘法 m = n = 3 test = [[0] * m] * n print(test)输出也看了一下,没啥问题 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] m = n = 3 test = [[0] * m] * n print(test) test[0][0] = 2 print(test)输出就变得奇怪了 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[2, 0, 0], [2, 0, 0], [2, 0, 0]]Note also that the copies are shallow; nested structures are not copied. This often haunts new Python programmers; consider: >>> lists = [[]] * 3 >>> lists [[], [], []] >>> lists[0].append(3) >>> lists [[3], [3], [3]] What has happened is that [[]] is a one-element list containing an empty list, so all three elements of [[]] * 3 are (pointers to) this single empty list. Modifying any of the elements of lists modifies this single list. You can create a list of different lists this way: >>> lists = [[] for i in range(3)] >>> lists[0].append(3) >>> lists[1].append(5) >>> lists[2].append(7) >>> lists [[3], [5], [7]] 也就是说matrix = [[array]] * 3操作中,只是创建3个指向array的引用,所以一旦array改变,matrix中3个list也会随之改变。 示例1 正确的做法 dp = [[0] * (3) for _ in range(3)] print(dp) dp[0][0]=4 print(dp)[[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[4, 0, 0], [0, 0, 0], [0, 0, 0]] 示例2 错误的做法 dp = [[0,0,0]]*3 print(dp) dp[0][0]=4 print(dp)[[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[4, 0, 0], [4, 0, 0], [4, 0, 0]] |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |