1 回答

TA貢獻1877條經(jīng)驗 獲得超1個贊
當(dāng)您運行時,您基本上只需附加對 to 的引用。因此,在末尾,您有一個引用列表,因為它們都指向同一個對象。self.solutions.append(self.grid)self.gridself.solutionsrunSolverself.solutions
這與對象和Numpy數(shù)組都是可變對象的事實有關(guān)。與 Python 字符串相反,例如,當(dāng)您修改它們(例如)時,相同的對象將就地修改,而不是創(chuàng)建新對象。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]]
每次添加網(wǎng)格時,都必須創(chuàng)建網(wǎng)格的副本,以便可以像當(dāng)時一樣獲得網(wǎng)格的“快照”。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'
添加回答
舉報