【发布时间】:2021-04-28 09:08:03
【问题描述】:
我想知道为什么下面的两个代码段有不同的输出。有人可以解释一下吗?
代码 1
d = 5
matrix_list = [[0] * d] * d
matrix_list[0][3] = 1
for i in matrix_list:
print(i)
Output:
[0, 0, 0, 1, 0]
[0, 0, 0, 1, 0]
[0, 0, 0, 1, 0]
[0, 0, 0, 1, 0]
[0, 0, 0, 1, 0]
代码 2
matrix_list = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
matrix_list[0][3] = 1
print()
for i in matrix_list:
print(i)
Output:
[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
【问题讨论】:
-
在
for循环中通过print(id(i))打印每个列表的内存位置。您会注意到,在代码 1 中,所有列表都指向相同的内存位置,而在代码 2 中,每个列表都分配了不同的内存。因此,当您在代码 1 中更新时,任何列表中的任何更改都将反映在所有其他列表中,因为在内部它们都只是单个列表。
标签: arrays python-3.x matrix