Python 2.7 Python中矩阵的初始化与求值

Python 2.7 Python中矩阵的初始化与求值,python-2.7,Python 2.7,我想知道,是否有人可以用python解释这种行为 在python中以以下方式初始化矩阵时 rows,cols = 3,3 visited = [[False]*rows]*cols visited[0][0] = True print visited [[True, False, False], [True, False, False], [True, False, False]] 相当于 visited = [] for i in range(rows): visited.appen

我想知道,是否有人可以用python解释这种行为 在python中以以下方式初始化矩阵时

rows,cols = 3,3
visited = [[False]*rows]*cols
visited[0][0] = True 
print visited
[[True, False, False], [True, False, False], [True, False, False]]
相当于

visited = []
for i in range(rows):
   visited.append([False]*cols)
visited[0][0] = True
print visited
[[True, False, False], [False, False, False], [False, False, False]]

我不确定,为什么在第一个案例中,第一个col的所有元素都被初始化为true。

奥斯瓦尔德枪杀了美国第35任总统,然后某个约翰·菲茨杰拉德·肯尼迪(John Fitzgerald Kennedy)死了。为什么?因为他们是同一个人

[[False]*rows]*cols
将首先构造一个数组
[False,False,False]
-我们称之为John-然后构造另一个数组,其中包含三个John。不是三份约翰的副本-三份约翰的参考资料

相同原理的简单演示:

a = [False]
b = a
a[0] = True
b[0]
# => True
b
[False]
不仅仅是
a
[True]
:只有一个
[True]
,有两个名称(
a
b

在该可视化中可以很容易地看到差异(单击“前进”逐步完成程序):

因此,正确初始化2D矩阵的最简单方法如下:

[[False] * rows for _ in range(cols)]

奥斯瓦尔德枪杀了美国第35任总统,然后某个约翰·菲茨杰拉德·肯尼迪死了。为什么?因为他们是同一个人

[[False]*rows]*cols
将首先构造一个数组
[False,False,False]
-我们称之为John-然后构造另一个数组,其中包含三个John。不是三份约翰的副本-三份约翰的参考资料

相同原理的简单演示:

a = [False]
b = a
a[0] = True
b[0]
# => True
b
[False]
不仅仅是
a
[True]
:只有一个
[True]
,有两个名称(
a
b

在该可视化中可以很容易地看到差异(单击“前进”逐步完成程序):

因此,正确初始化2D矩阵的最简单方法如下:

[[False] * rows for _ in range(cols)]