在创建 2D 时遇到问题 array/list

Having trouble in creating 2D array/list

我在创建二维排列列表时遇到困难。这是重现问题的最小代码

class Solution:
def permute(self, A):
    A = sorted(A)
    print A
    A_out = []
    A_out.append(A)
    for iter0 in range(4):
        A[0] = A[0] + 1
        print A
        A_out.append(A)
    return A_out

sol = Solution()
A = [1, 2, 3]
print sol.permute(A)

对于这个特定的输入(1、2、3),输出是

[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3], [5, 2, 3]]

但所需的输出是

[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[4, 2, 3]
[5, 2, 3]
[[1, 2, 3], [2, 2, 3], [3, 2, 3], [4, 2, 3], [5, 2, 3]]

我认为它可以做深拷贝/浅拷贝,但我不确定如何纠正这个问题,因为我对 Python 不是很熟悉。我该如何解决?

确实是浅拷贝。您不断追加的列表 A 始终引用相同的值。这与 Python.

中列表的可变性有关

您需要每次都附加一个新的列表副本,使它们相互独立。您可以使用切片运算符 [:] 来做到这一点,因为它会创建列表的新副本。所以你可以在调用 append

时使用它
def permute(self, A):
    A = sorted(A)
    print A
    A_out = []
    A_out.append(A[:])
    while (self.checkVal(A) != -1) :
        A = self.nextState(A,self.checkVal(A))
        print A
        A_out.append(A[:])
    return A_out