import random
l = [[]*2]*2
for u in range(2):
for i in range(2):
l[u].append(random.randint(0,1024) )
print(l)
1、为什么结果是[[996, 195, 536, 198], [996, 195, 536, 198]]
2、不应该只有2*2=4个数值嘛,为什么会出现8个?
3、为什么两个小列表是一样的数值,不是随机的嘛?
4、另外,随机矩阵要怎么建?
import random
l = [[]*2]*2
for u in range(2):
for i in range(2):
l[u].append(random.randint(0,1024) )
print(l)
1、为什么结果是[[996, 195, 536, 198], [996, 195, 536, 198]]
2、不应该只有2*2=4个数值嘛,为什么会出现8个?
3、为什么两个小列表是一样的数值,不是随机的嘛?
4、另外,随机矩阵要怎么建?
问题出在初始赋值上: l = [[]2]2,第一个2是没意义的,一个列表100都还是空列表
第2个*2,是把[[]]这个空列表作元素的单元素列表变成2个元素的列表:即[[],[]]
并且这个两个列表是指向同一地址的,相当一个是另一个副本。直接声明为 l = [[],[]] 就没有这样的问题
>>> l = [[]*2]*2
>>> l
[[], []]
>>> l[0].append(1)
>>> l
[[1], [1]]
>>> l[0].append(2)
>>> l
[[1, 2], [1, 2]]
>>> l[1].append(3)
>>> l
[[1, 2, 3], [1, 2, 3]]
>>> l[1].append(4)
>>> l
[[1, 2, 3, 4], [1, 2, 3, 4]]
>>> l = [[],[]]
>>> l[0].append(1)
>>> l
[[1], []]
>>> l[0].append(2)
>>> l
[[1, 2], []]
>>> l[1].append(3)
>>> l
[[1, 2], [3]]
>>> l[1].append(4)
>>> l
[[1, 2], [3, 4]]
>>>