考虑一下:
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]]?
答案 0 :(得分: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]现在是不同的
答案 1 :(得分:0)
另外节省空间:
>>> [[x,x] for x in xrange(1,3)]