首页 > 解决方案 > 两个循环无法将二维列表复制到 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)也没有准确地映射值

标签: pythonlistloopsfor-loop

解决方案


推荐阅读