有一个列表,循环后会更改。但是我什么也不会改变,只是使用它。
a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = a[:]
for i in range(4):
for j in range(4):
b[i][j] = a[j][i]
则a变为[[1、0、1、0],[0、0、1、0],[1、1、0、0],[0、0、0、0]]
如果有人告诉我发生了什么以及如何解决此问题,我将非常感激。
答案 0 :(得分:1)
b
不是a
的深层副本,它只是保存对a
所做的相同数组的引用。更改b
中的子级时,将更改a
中的相同元素。
您不需要首先复制阵列。由于您要按顺序向b中添加元素,因此您可以随时添加:
a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = []
for i in range(4):
b.append([])
for j in range(4):
b[i].append(a[j][i])
您还可以使用以下方法更简单地获得相同的结果:
a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
list(zip(*a))
答案 1 :(得分:0)
如果有人告诉我发生了什么以及如何解决此问题,我将非常感激。
关于解决此问题:如果您希望(gdb) ptype /m TestDataTemplate
type = struct TestDataTemplate {
TestDataTemplateObj3<int, 2> m_obj3Int2;
}
---------
(gdb) ptype /m TestDataTemplate
type = struct TestDataTemplate {
TestDataTemplateObj3<int, 2ul> m_obj3Int2;
}
是b
的副本,则可以使用copy
模块:
a