1 回答
TA贡献1877条经验 获得超1个赞
当您运行时,您基本上只需附加对 to 的引用。因此,在末尾,您有一个引用列表,因为它们都指向同一个对象。self.solutions.append(self.grid)self.gridself.solutionsrunSolverself.solutions
这与对象和Numpy数组都是可变对象的事实有关。与 Python 字符串相反,例如,当您修改它们(例如)时,相同的对象将就地修改,而不是创建新对象。Gridself.grid.setValue(col, row, num)
下面是用列表列表说明的相同问题:
>>> l = []
>>> x = [1]
>>> l.append(x)
>>> l
[[1]]
>>> x.append(2)
>>> l.append(x)
>>> l
[[1, 2], [1, 2]]
每次添加网格时,都必须创建网格的副本,以便可以像当时一样获得网格的“快照”。self.solutions
你可以做这样的事情:
class Grid:
def __init__(self, grid=None):
if grid == None:
self.grid = np.zeros((3, 3))
else:
# Copy the array, otherwise we'll have the same mutability issue as above.
self.grid = np.copy(grid)
在:runSolver
grid_copy = Grid(self.grid.grid)
self.solutions.append(grid_copy) # this should append the solution to 'solutions'
添加回答
举报