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)
I have a State class that contains a list of lists named 'current' and i'm trying to define a function that gets all the possible children(moves) of the current state. in the first IF statement, i create a COPY of the current variable(which is a list of lists) and store it in a 'tempState' list and then i try to swap values on that tempState, create a State object passing that in and then append that object to a list. All that works fine. The problem is when it get's to the 2nd IF statement. After i did the swap, It modified the original 'current' variable even though i created a copy! and I can't figure out why. I tried list(self.current), self.current[:], copy.cop(self.current). Please help