我知道简单地将一个列表分配给另一个预先存在的列表会给它相同的地址,例如
x = [1, 2]
y = x
y[0] = 3
print(x, y)
给出输出
[3, 2] [3, 2]
为了防止这种情况,它必须这样写......
y = list(x)
、y = x[:]
等
但是,这似乎不适用于我的情况...
for i in range(layer_rot):
for r in range(l - 1, n_rows - l + 1):
if r == l - 1:
result[r][n_col - l] = int(ref_matrix[r + 1][n_col - l])
elif r == n_rows - l:
result[r][l - 1] = int(ref_matrix[r - 1][l - 1])
else:
result[r][l - 1] = int(ref_matrix[r - 1][l - 1])
result[r][n_col - l] = int(ref_matrix[r + 1][n_col - l])
...
ref_matrix = result[:] # Assume ref_matrix is initialized correctly before the first iteration of the outer loop
我希望ref_matrix
只是result
的副本,但是当我更改条件语句中的result
时,我注意到ref_matrix
随之而变化。我已经检查了他们的身份证,但他们都像预期的那样不同。有什么想法吗?
您正在使用 list
s 的嵌套list
,但ref_matrix = result[:]
只制作顶级list
的浅拷贝,因此您有一个新的list
包含与第一个相同的list
s。
这里最简单的解决方案是切换到完整的深度副本:
import copy
然后替换:
ref_matrix = result[:]
跟:
ref_matrix = copy.deepcopy(result)
无论您的list
嵌套有多深(以及它们的内容有多可变),这都将确保所有可变元素与原始list
完全分离。