Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改多维度列表中一行的值会更改所有行吗?_Python_Python 3.x - Fatal编程技术网

Python 更改多维度列表中一行的值会更改所有行吗?

Python 更改多维度列表中一行的值会更改所有行吗?,python,python-3.x,Python,Python 3.x,我觉得我在做一些非常愚蠢的事情。也许我太累了 我试图创建一个真值表,其大小取决于“计数”——表中变量的数量 table = [[None] * int(pow(2, count))] * count in_a_row = pow(2, count) / 2 iterator = 0 for i in range(count): for j in range(int(pow(2, count))): print(str(i)

我觉得我在做一些非常愚蠢的事情。也许我太累了

我试图创建一个真值表,其大小取决于“计数”——表中变量的数量

    table = [[None] * int(pow(2, count))] * count
    in_a_row = pow(2, count) / 2
    iterator = 0
    for i in range(count):
        for j in range(int(pow(2, count))):
            print(str(i) + ' ' + str(j), end = '')
            if iterator < in_a_row:
                table[i][j] = 'T'
                print(' T')
            elif iterator == 2 * in_a_row:
                table[i][j] = 'T'
                iterator = 0
                print(' T')
            else:
                table[i][j] = 'F'
                print(' F')
            iterator += 1

        print(table)
        in_a_row /= 2
        iterator = 0
您可以看到我在一次迭代中设置的内容在所有“行”中都得到了响应。有人能告诉我这里出了什么问题吗

我当然期待着:

[['T', 'T', 'F', 'F'], ['T', 'F', 'T', 'F']]

将第一行更改为:

table = [[None] * int(pow(2, count)) for _ in range(count) ]

毫无疑问,您已经注意到,在第一个版本中,每一行共享一个对同一列表的引用,而在这个新版本中,我们为每一行创建一个新列表。

由于
*count
的原因,它在所有行中回响。您实际上是在存储对最初创建的数据
count
次的引用mgilson对此有一个解决方案。

哦,好吧,我想这是有道理的。就像一个指针一样。我相信你缺少了一个[在那里,我实际上在第一部分中使用了相同的技术来让它工作,但是
table=[[None]for uu-in-range(int(pow(2,count))]for u-in-range(count)]
似乎很有效。谢谢你!@cmahaf--对不起,我有一个额外的
]
。(这就是我没有测试的结果)。是的,它就像一个“指针”。python称它们为“引用”,但这主要是语义…哦,这是有道理的。谢谢你的解释!
table = [[None] * int(pow(2, count)) for _ in range(count) ]