Python使列表副本,而不是引用

时间:2015-02-10 19:00:03

标签: python

我在python代码中有一个名为board的int列表。我不知道,如果它被修改了,所以我有代码

self.oldboard = list(self.board)
#here is board modified, if it is possible
if not self.oldboard == self.board:
    #this should execute only when board was modified

oldboard总是等于board,当我修改board时,它会修改oldboard。如何oldboard只复制board,而不是参考?

2 个答案:

答案 0 :(得分:3)

通过切片方法复制列表时(类似于您当前正在执行的操作):

new_list_copy = old_list[:]

你只会获得内容的“浅层”副本。这不适用于包含列表的列表(“嵌套列表”)。

如果您尝试复制嵌套列表,Pythonic解决方案是使用copy模块中的deepcopy

import copy
new_list_copy = copy.deepcopy(old_list)

答案 1 :(得分:0)

整数是不可变的。我建议您熟悉浅层和深层复制操作的概念,您可以在Python Docs here 中找到它们。

在你的情况下,你很可能需要使用deepcopy,因为我猜你有几个嵌套列表。