当我们修改它的一个元素时,两种(看似)等效的构造python嵌套列表的方式将表现出很大的不同:
构造1:修改一个元素不会影响其他元素。
p1 = [[0] * 5 for i in range(4)]
p1[2][2] = 3
p1
Out[25]: [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 3, 0, 0], [0, 0, 0, 0, 0]]
构造2:修改一个元素将修改同一列中的所有元素。
p2 = [[0] * 5] * 4
p2[2][2] = 3
p2
Out[23]: [[0, 0, 3, 0, 0], [0, 0, 3, 0, 0], [0, 0, 3, 0, 0], [0, 0, 3, 0, 0]]
我想知道为什么会这样吗?这两种构造方式似乎是等效的。