为什么列表在循环后会发生变化

时间:2019-04-05 03:44:35

标签: python python-3.x

有一个列表,循环后会更改。但是我什么也不会改变,只是使用它。

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]]

如果有人告诉我发生了什么以及如何解决此问题,我将非常感激。

2 个答案:

答案 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