2014-09-30 275 views
0

我在解决Python中的8个难题时遇到了BFS问题。我需要移动方法来返回一个新的拼图,而不是修改原来的拼图。下面的输出显示原始拼图正在被修改,而不是正在生成的新拼图。我试图复制,但没有奏效,列表没有深层复制。有没有一种简单的方法可以从原件创建新对象?修改原始变量而不是创建新变量的Python

def move(puzzle, direction): 
    # find where the zero (gap) is and swap in the given direction  
    row_count = 0 
    for row in puzzle: 
     if '0' in row: 
      gapx = row.index('0') 
      gapy = row_count 
     row_count = row_count + 1 

    # move it accordingly, as long as the move is legal 
    if direction == 'up' and (gapy==1 or gapy==2): 
     temp = puzzle[gapy-1][gapx] 
     puzzle[gapy-1][gapx] = '0' 
     puzzle[gapy][gapx] = temp 
     return puzzle 


pretty_print(puzzle_state) 
new_puzzle = move(puzzle_state, 'up') 
pretty_print(puzzle_state) 

输出:

123 
804 
765 

103 
824 
765 
+0

为什么你认为你不能'deepcopy'列表? – 2014-09-30 22:52:59

+0

看起来我错了。谢谢! – mobone 2014-09-30 22:54:24

回答

0

copy.deepcopy()的工作,我原本是想puzzle.deepcopy(),这是不使用深层副本的正确方法。谢谢!