Python 8puzzle 的最后一个功能代码

Last function code of 8puzzle in Python

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 函数从旧矩阵创建新矩阵。 我想从我的第一个矩阵中为 "liste" 赋值。因此我在 "swap_blank_tile" 函数中使用了 matrix2,但是 "matrix" 也受到 "swap_blank_tile" 函数的影响,但我不想要它。只有 matrix2 必须受此函数的影响。我无法解决为什么矩阵也受此功能的影响。

matrix 是什么数据类型?

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

from copy import deepcopy
matrix2 = deepcopy(matrix)

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

在您的代码中:

matrix2=matrix

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

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)