0
def result(matrix):
        matrix2=matrix
        for a in possible_moves(matrix2):
            matrix2=matrix
            print()
            liste=swap_blank_tile(matrix2,a)
            print(liste)
            print(matrix)

我在 Python 中有这段代码。Swap_blank_tile 函数从旧矩阵创建一个新矩阵。我想从我的第一个矩阵中“列出”一个值。因此我在“swap_blank_tile”函数中使用了matrix2,但“matrix”也受到“swap_blank_tile”函数的影响,但我不想要它。只有 matrix2 必须受到此函数的影响。我无法解决为什么矩阵也会受到此功能的影响。

4

2 回答 2

0

什么数据类型matrix

可能它是一个列表列表,在这种情况下,您需要制作一个完整的矩阵副本。使用copy.deepcopy()

from copy import deepcopy
matrix2 = deepcopy(matrix)

这样做的原因是它matrix2 = matrix不会复制matrix,它只是将名称绑定matrix2到同一个对象。因此,对对象所做的任何更改都可以从两个变量中看到。deepcopy()将下降到对象中并复制任何嵌套对象,从而产生 2 个独立的对象。

于 2015-05-09T13:05:44.057 回答
0

在您的代码中:

matrix2=matrix

matrix2并且matrix仍然是对同一个对象的引用,所以如果你改变一个,你就会改变另一个。您可能想要创建一个深拷贝。

from copy import deepcopy
def result(matrix):
    matrix2=deepcopy(matrix)
    for a in possible_moves(matrix2):
        matrix2=deepcopy(matrix)
        print()
        liste=swap_blank_tile(matrix2,a)
        print(liste)
        print(matrix)
于 2015-05-09T13:06:13.003 回答