首先是我常用的列表创建方法创建列表
a = [[]]*9
# a = [[], [], [], [], [], [], [], [], []]
a[0].append(0)
# 按我初始想法是仅有a[0]添加了一个0,但事实并非如此
print(a)
# a = [[0], [0], [0], [0], [0], [0], [0], [0], [0]]
发现我的问题出在哪了。我们可以发现整个列表都添加了一个0,这是因为 [ [ ] ] * 9创建的是9个指向这个空列表元素的引用,即一种浅拷,所以我们修改其中任何一个等于修改其他列表,这9个空列表其实是一个。推荐大家以后少用这种方式。
利用for循环来创建二维列表
a = []
for i in range(9):
a.append([])
# a = [[], [], [], [], [], [], [], [], []]
a[0].append(0)
print(a)
# a = [[0], [], [], [], [], [], [], [], []]
这次如我预期仅改变了第一个列表。这样写for循环可能略显冗余,那我们可以
a = [[] for i in range(9)]