我有清单:
DATA = [[5, 3, 0, 0, 7, 0, 0, 0, 0],
[6, 0, 0, 1, 9, 5, 0, 0, 0],
[0, 9, 8, 0, 0, 0, 0, 6, 0],
[8, 0, 0, 0, 6, 0, 0, 0, 3],
[4, 0, 0, 8, 0, 3, 0, 0, 1],
[7, 0, 0, 0, 2, 0, 0, 0, 6],
[0, 6, 0, 0, 0, 0, 2, 8, 0],
[0, 0, 0, 4, 1, 9, 0, 0, 5],
[0, 0, 0, 0, 8, 0, 0, 7, 9]]
在test_function中,我更改了此列表的1个数字:
def test_check_value(self):
DATA[1][3] = 7...
(我用其他数字在多个函数中执行此操作)
最后我的整个名单都发生了变化。我能做些什么,以便函数只测试它(使用更改的值)并且不更改主列表的值?
答案 0 :(得分:2)
在每次测试开始时使用copy.deepcopy
>>> import copy
>>> l1 = [[1, 2], [3, 4]]
>>> l2 = copy.deepcopy(l1)
>>> l2[0][0] = 9
>>> l2
[[9, 2], [3, 4]]
>>> l1
[[1, 2], [3, 4]]
请注意,它可以很好地工作,因为您将整数保留在嵌套列表中。如果它是一些可修改的数据结构,deepcopy
将创建新实例。
答案 1 :(得分:1)
您可以在本地复制列表,为此,您可以使用copy.deepcopy
功能。
import copy
def test_check_value(self):
local_list = copy.deepcopy(DATA)
local_list[1] = 0
我觉得有趣的是,使用内置的list()
函数进行复制不适用于嵌套列表,因此在这种情况下必须使用copy.deepcopy
。
感谢@Bartosz Marcinkowski指出这一点。
有关列表副本的详细信息,请参阅http://stackoverflow.com./a/2612815/2549230
答案 2 :(得分:0)
您似乎已将列表定义为全局 .thus,为了解决这种情况,您需要将列表副本传递给您的函数,您可以使用[a[:] for a in DATA]
来复制嵌套列表或使用copy.deepcopy()
:
my_list=[a[:] for a in DATA]
def test_check_value(self,my_list):