【问题标题】:How to avoid reference issue with array append in python [duplicate]如何避免python中数组追加的引用问题[重复]
【发布时间】:2020-04-08 20:37:29
【问题描述】:

我们来看看下面的代码

board = [[0,0,0],[0,0,0],[0,0,0]]
versionsOfBoard = []
versionsOfBoard.append(board); #this will keep the versions of board array
print(versionsOfBoard);
# output
# [[[0,0,0],[0,0,0],[0,0,0]]]
# later I change few values in the board and append 'board' to my versions array
board[0][0] = 1
versionsOfBoard.append(board)
print(versionsOfBoard)
# output
# [[[1, 0, 0], [0, 0, 0], [0, 0, 0]], [[1, 0, 0], [0, 0, 0], [0, 0, 0]]]
# if you notice here, the 0th index value is also changed
board[1][2] = 1
versionsOfBoard.append(board)
print(versionsOfBoard)
# output
# [[[1, 0, 0], [0, 0, 1], [0, 0, 0]], [[1, 0, 0], [0, 0, 1], [0, 0, 0]], [[1, 0, 0], [0, 0, 1], [0, 0, 0]]]

每个索引值都显示'board'的最新状态。它正在引用董事会。 我尝试过使用 .append(board[:]) 和 .append(board.copy())。这两个选项也不能解决问题。

任何帮助将不胜感激

【问题讨论】:

  • 试试append(board.deepcopy())copy() 只下降一级。
  • 谢谢@Prune。 deepcopy 为我工作。我做了 .append(copy.deepcopy(board))

标签: python arrays python-3.x list


【解决方案1】:

试试这个

import copy
board = [[0,0,0],[0,0,0],[0,0,0]]
versionsOfBoard = []
versionsOfBoard.append(copy.deepcopy(board))
print(versionsOfBoard);

board[0][0] = 1
versionsOfBoard.append(copy.deepcopy(board))
print(versionsOfBoard)

board[1][2] = 1
versionsOfBoard.append(copy.deepcopy(board))
print(versionsOfBoard)

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 2017-11-06
    • 1970-01-01
    • 2021-10-20
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多