在 Python IDLE 中验证
>>> x = [[]]*9
>>> x
[[], [], [], [], [], [], [], [], []]
>>> x.append(1)
>>> x
[[], [], [], [], [], [], [], [], [], 1]
>>> x[0].append(1)
>>> x
[[1], [1], [1], [1], [1], [1], [1], [1], [1], 1]
- 上面的x是二维数组,向x中的某一个数组添加元素,却使所有数组都添加了该元素
- 可以用下面的方式解决
>>> z = [[] for i in range(9)]
>>> z
[[], [], [], [], [], [], [], [], []]
>>> z[0].append(1)
>>> z
[[1], [], [], [], [], [], [], [], []]
运行下面的代码
k = []
kk = []
kkk = []
count = 1
for i in range(8):
k.clear()
for j in range(8):
if (i == j or i + 1 == j or i == j + 1):
k.append(1)
kk.append({count: (i + 1, j + 1)})
count += 1
continue
k.append(0)
print(k)
kkk.append(k)
print(kkk)
得到如图结果:
- 问题:本来是将前面的已经生成的列表加入到一个列表中,形成二维列表,但最终形成的列表的元素是一样的
- 原因:k用来存储生成的列表,将k加入到kkk中,k只是引用,所有kkk存储了k的最后的值
kkk.apend(k) 加入的是k的引用,所以输出的总是最后一行
-
解决:
每次添加都将k列表化,再加入到kkk中
kkk.apend(list(k))