我知道,只需将一个列表分配给另一个预先存在的列表即可为其赋予相同的地址,例如
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
随之变化。我已经检查了他们的ID,但是两者都与预期的不同。有什么想法吗?
答案 0 :(得分:1)
您使用的是list
的嵌套 list
,但是ref_matrix = result[:]
仅对< em> top 级别list
,因此您拥有一个新list
,其中包含与第一个相同的list
。
这里最简单的解决方案是只切换到a full deep copy:
import copy
然后替换:
ref_matrix = result[:]
具有:
ref_matrix = copy.deepcopy(result)
无论您的list
嵌套的深度如何(以及其内容如何可变),这都将确保所有可变元素都与原始list
完全分离。