Python:将嵌套列表的副本附加到列表中

时间:2013-02-25 17:08:12

标签: python arrays list append nested

在我的代码中,我有嵌套列表gamelist,定义为

gamelist = [['3'], ['2'], ['1']]

该程序的目的是将内部列表视为堆栈,将较小的元素附加到包含较大元素或空堆栈的堆栈中,在列表中上下扫描而不重复移动。理论上这个游戏应该去:

[['3'], ['2'], ['1']]
[['3'], ['2', '1'], []]
[['3', '1'], ['2'], []]
[['3', '1'], [], ['2']]

依此类推,直到列表从最小到最大排序。

为了检查当前移动与之前的移动,我创建了pastmoves,每次移动后都会附加gamelist的副本。

pastmoves.append(gamelist[:])

所以pastmoves应该阅读

[[['3'], ['2'], ['1']]]
[[['3'], ['2'], ['1'], [['3'], ['2', '1'], []]]

以后每次连续移动。

我的问题是,在复制游戏列表时,嵌入其中的列表不是,并且pastmoves在两次移动后看起来像这样:

[[['3'], ['2', '1'], []], [['3'], ['2', '1'], []]]

我想这样做,以便所有底层值都是副本,并在gamelist更改时保持静态。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

from copy import deepcopy

pastmoves.append(deepcopy(gamelist))

答案 1 :(得分:1)

最简单的方法就是使用copy.deepcopy()在嵌套列表上进行深层复制。

答案 2 :(得分:1)

作为copy.deepcopy()的替代方法,您可以通过列表理解来实现此目的:

pastmoves.append([inner[:] for inner in gamelist])

请注意,这只适用于一个嵌套级别,如果您有任意嵌套列表,那么copy.deepcopy()绝对是可行的方法。

答案 3 :(得分:0)

简单:pastmoves.append( list(gamelist[:]) )

现在每次都会生成新对象