def get_all_children(self):
zero = self.current_coords[0]
zero_row, zero_col = zero
states = []
# blank spot is not on top row(middle or bottom) so we move up!
if zero_row > 0:
swapRow = zero_row - 1
tempState = copy.copy(self.current) # a list of list of strings
tempState[zero_row][zero_col], tempState[swapRow][zero_col] = tempState[swapRow][zero_col], tempState[zero_row][zero_col]
s = State(tempState)
states.append(s)
## blank spot is not on the bottom row(middle or top) so we move down!
if zero_row < 2:
swapRow = zero_row + 1
tempState = copy.copy(self.current)
tempState[zero_row][zero_col], tempState[swapRow][zero_col] = tempState[swapRow][zero_col], tempState[zero_row][zero_col]
s = State(tempState)
states.append(s)
我有一個State類,其中包含名爲'current'的列表,並且我試圖定義一個函數來獲取所有可能的子元素(移動)當前狀態。在第一個IF語句中,我創建當前變量(這是一個列表列表)的COPY並將其存儲在'tempState'列表中,然後我嘗試在該tempState上交換值,創建一個State對象,並將其傳入並然後將該對象附加到列表中。所有的工作正常。問題在於何時到達第二個IF語句。在我做了交換之後,它修改了原來的'當前'變量,即使我創建了一個副本!我無法弄清楚爲什麼。 我試過list(self.current),self.current [:],copy.cop(self.current)。請幫助Python原始列表被複制後仍被修改
您是否閱讀過[文檔](https://docs.python.org/2/library/copy.html)? – BrenBarn
請發佈'State'類的代碼,否則我們看不到您的引用錯誤的位置。 – KeatsKelleher
正如BrenBarn所說的,如果您要複製列表列表,您需要'deepcopy()'。 – TemporalWolf