用for循环创建一个二维列表,和用乘号*创建一个二位列表,输出的结果一摸一样,
但是在操作之后就不一样了
代码如下:
im,jm = 4,4
sign1 = []
sign2 = []
temp = []
for i in range(im):
for j in range(jm):
temp.append(True)
sign1.append(temp)
temp = []
print(sign1,'\n')
sign2 = [[True]*jm]*im
print(sign2,'\n')
sign1[0][0] = False
sign2[0][0] = False
print(sign1,'\n')
print(sign2,'\n')
结果如下
[[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, True, True],
[True, True, True, True]]
[[False, True, True, True],
[True, True, True, True],
[True, True, True, True],
[True, True, True, True]]
[[False, True, True, True],
[False, True, True, True],
[False, True, True, True],
[False, True, True, True]]
(为了方便大佬们看,我自己加了换行)
我觉得你第二个之所以不正确,是因为python你写了第一个[True, True, True, True]之后,自动的转为引用方式,而不是直接创建新地址存放,所以你修改一个,其他的地方也会被干扰
https://www.cnblogs.com/woshare/p/5823303.html
参考这篇,实际上[[True]*jm]
是作为一个整体的,所以后面赋值时,会同步生效