交织功能未产生预期结果

Interleaving function not producing expected results

我正在尝试创建一个函数,将二进制列表交织到数组中。矩阵大小为 10 行 x 9 列,初始化为 None。这些位一次一个地馈入矩阵,第一个输入位被馈入 (0,0)。位被馈入(上一行+7)mod10,当列满时,将列右移,0列填充下一组位。 但是,我 运行 遇到了列填充循环的问题。零列中的每一行都设置为相同的值!

这是我目前的情况:

>>> row = 0
>>> interleave_row = [None,None,None,None,None,None,None,None,None]
>>> interleave_matrix = [interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row,interleave_row]

这会产生一个如下所示的矩阵:

    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None]]
>>> input = [0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0]
>>> for i in range(0,10):
        interleave_matrix[row][0] = input[i]
        row = (row+7)%10

这产生:

    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None]]

应该看起来像这样:

    [0, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [0, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None]]

我有菜鸟时刻吗?我知道行增量工作正常,因为我自己循环了它。是什么导致了这种奇怪的行为?

编辑:我只是尝试遍历前四位(保证以 0 位结束),它没有将整行设置为该位,它只是将整行设置为 1 。越来越奇怪了...

答案由 Pavel 发布!

Your matrix actually contains N references to the same column. So when you modify a value in one column, this value is also modified in all other columns. Consider creating matrix another way to make independent columns: whosebug.com/q/2397141/6131611 whosebug.com/q/6667201/6131611

这绝对是一个菜鸟时刻,但我必须从中吸取教训!谢谢!