嵌套列表和for循环
考虑一下这个:
list = 2*[2*[0]]
for y in range(0,2):
for x in range(0,2):
if x ==0:
list[x][y]=1
else:
list[x][y]=2
print list
结果是:
[[2,2],[2,2]]
为什么结果不是 [[1,1],[2,2]] 呢?
2 个回答
0
另外,如果想节省空间:
>>> [[x,x] for x in xrange(1,3)]
12
因为你创建了一个列表,其中有两个引用指向同一个子列表。
>>> L = 2*[2*[0]]
>>> id(L[0])
3078300332L
>>> id(L[1])
3078300332L
所以对 L[0] 的修改会影响到 L[1],因为它们实际上是同一个列表。
通常要实现你想要的效果,可以这样做:
>>> L = [[0]*2 for x in range(2)]
>>> id(L[0])
3078302124L
>>> id(L[1])
3078302220L
注意,现在 L[0] 和 L[1] 是不同的了。