我有两个具有以下结构的变量:
# initialization
O1 = [[] for g in range(n)]
for i in range(n):
O1[i] = [[] for g in range(m)]
O2 = [[] for g in range(n)]
for i in range(n):
O2[i] = [[] for g in range(m)]
然后,我将这两个输入到一个初始函数中,其中将不同的值附加到它们上:
for i in range(n):
for j in range(m):
O1[i][j].append([s, as, pat, 0])
O2[i][j].append([[ol, oa, os, ot],[dl, da, ds],tpat, tp, 0])
如您所见,列表的内部结构变得复杂,尤其是在 O2 的情况下。给 O1 和 O2 赋值后,它们被输入到其他几个函数中。每个函数都需要对 O1 和 O2 进行深度复制,并修改该副本以供自己使用,而不更改原始 O1 和 O2 变量。这些更改包括 .remove() 和 .append() 以及内部列表中值的 +/-。重要的是,无论怎么改变,原来的O1和O2都不应该有任何改变。该过程迭代运行,首先为 O1 和 O2 分配新值,然后输入到其他几个函数中并进行复制和编辑,而不对用作输入的原始 O1 和 O2 进行任何更改。 使用 .deepcopy() 是我知道的唯一方法,但由于这是一个迭代过程,.deepcopy() 函数会显着减慢代码速度,尤其是当 O1 和 O2 很大时。我尝试过使用元组作为不可变的数据结构,但考虑到初始和内部结构以及函数中所做的更改,它不起作用。使用元组可以防止append() 和remove() 更改,但不能防止+/- 操作。 如果有人能建议一种更快的方法来做到这一点,我将不胜感激。
可以有多种解决方案: