Python 嵌套列表和For循环

Python 嵌套列表和For循环,python,Python,考虑这一点: 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]]?因为您创建的列表是对同一子列表的两个引用 >>> L = 2*[2*[0]] >>> id(L[0]

考虑这一点:

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]]?

因为您创建的列表是对同一子列表的两个引用

>>> 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]现在是不同的

以节省空间:

>>> [[x,x] for x in xrange(1,3)]

是的!请改为尝试list=[[0,0],[0,0]]。我调试这个东西有一段时间了,但似乎没有什么意义。我添加了print语句,它输出了正确的值,但我没想到会是这样!