python - 两个循环无法将二维列表复制到 python 中的新变量
问题描述
我知道,如果您有一个 2D 数组并想要复制它,我们可以使用此处所述的 copy() 或 hardcopy() 函数 https://stackoverflow.com/questions/2541865/copying-nested-lists-蟒蛇内
上述解决方案工作正常,但在以下代码中:
cost_adjacency_matrix = [[0, 999, 3, 999], [2, 0, 999, 999], [999, 7, 0, 1], [6, 999, 999, 0]]
distance_matrix = [[0] * len(cost_adjacency_matrix)] * len(cost_adjacency_matrix)
for i in range(0, len(cost_adjacency_matrix)):
for j in range(0, len(cost_adjacency_matrix)):
distance_matrix[i][j] = cost_adjacency_matrix[i][j]
print(distance_matrix)
现在我知道如果我这样做了,distance_matrx = cost_adjacency_matrix
那么我不是在创建一个新的内存空间,而是在创建一个指向同一内存的变量。
分配只是复制对列表的引用,而不是实际的列表。
我将 distance_matrix 声明为一个新变量,其值填充为 0。
然后将值从 cost_adjacency_matrix 映射到 distance_matrix。我希望结果应该给我与 cost_adjacency_matrix 相同的 distance_matrix 但我得到的 distance_matrix 如下
Output:
distance_matrix = [[6, 999, 999, 0], [6, 999, 999, 0], [6, 999, 999, 0], [6, 999, 999, 0]]
正如所观察到的,已为所有列表复制了最后的子列表。如果您在每次外部迭代中打印 distance_matrix,我们会看到,在 i 的每次迭代中,distance_matrix 都会获取 cost_adjacency_matrix 的整个子列表值。
为什么即使我们创建了一个新的参考(distance_matrix)也没有准确地映射值
解决方案
推荐阅读
- javascript - 为什么我不能重新分配 window.document 属性?
- python - 高斯过程回归的内核参数:如何在 Scikit-learn 中获取它们?
- android - 备份数据库后,我无法恢复选定的数据库
- git - SourceTree 没有响应
- javascript - OpenLayers - 使用 Overpass Turbo API
- javascript - 为内联事件处理程序添加内容安全策略
- c - 将 fgetc 与 && 和 || 一起使用 c中的运算符
- javascript - @onchange 中的 Ajax 调用抛出错误“url undefined”
- c - 在 printf 中使用括号无法正常工作
- python - 如何将具有属性数组的类解析为json