Python 二维列表中的元素重复,同时更改一个值?

Python 二维列表中的元素重复,同时更改一个值?,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,下面是python代码,我使用操作符*初始化了一个二维列表,并使用其他值设置对角线元素。但是得到意外的输出 table = [([False]*5)]*5 for i in range(5): table[i][i] = 1 预期产量为 [[True, False, False, False, False], [False, True, False, False, False], [False, False, True, False, False], [False, False,

下面是python代码,我使用操作符*初始化了一个二维列表,并使用其他值设置对角线元素。但是得到意外的输出

table = [([False]*5)]*5
for i in range(5):
   table[i][i] = 1
预期产量为

[[True, False, False, False, False],
 [False, True, False, False, False],
 [False, False, True, False, False],
 [False, False, False, True, False],
 [False, False, False, False, True]]
但是我有

[[True, True, True, True, True], 
 [True, True, True, True, True], 
 [True, True, True, True, True], 
 [True, True, True, True, True], 
 [True, True, True, True, True]]

我想列表中的元素可能指的是一个。如何在不使用numpy或其他包的情况下获得预期的输出?

通过嵌套的
for
循环在
构造中明确,否则列表中的指针将全部指向单个列表。这就是为什么在代码中,分配一个元素会影响所有元素

table = [[False for i in range(5)] for j in range(5)]

for i in range(5):
    table[i][i] = True

# [[True, False, False, False, False],
#  [False, True, False, False, False],
#  [False, False, True, False, False],
#  [False, False, False, True, False],
#  [False, False, False, False, True]]

如果您愿意使用第三方库,最好使用
numpy

import numpy as np

table = np.eye(5).astype(bool)

# array([[ True, False, False, False, False],
#        [False,  True, False, False, False],
#        [False, False,  True, False, False],
#        [False, False, False,  True, False],
#        [False, False, False, False,  True]], dtype=bool)

通过嵌套的
for
循环,在
构造中要明确,否则列表中的指针将全部指向单个列表。这就是为什么在代码中,分配一个元素会影响所有元素

table = [[False for i in range(5)] for j in range(5)]

for i in range(5):
    table[i][i] = True

# [[True, False, False, False, False],
#  [False, True, False, False, False],
#  [False, False, True, False, False],
#  [False, False, False, True, False],
#  [False, False, False, False, True]]

如果您愿意使用第三方库,最好使用
numpy

import numpy as np

table = np.eye(5).astype(bool)

# array([[ True, False, False, False, False],
#        [False,  True, False, False, False],
#        [False, False,  True, False, False],
#        [False, False, False,  True, False],
#        [False, False, False, False,  True]], dtype=bool)