嵌套列表[[0, 0], [0, 0], [0, 0]]赋值的有关问题解决不了啊求指导

嵌套列表[[0, 0], [0, 0], [0, 0]]赋值的问题解决不了啊,求指导!
用b=[[0,0]]*3建立了这样一个嵌套列表
[[0, 0], [0, 0], [0, 0]]

想把这个嵌套列表变成
[[1, 0], [0, 0], [0, 0]],就是在第一个子列表的第一个元素那加1,其它的元素都不变

用b[0][0]=1,结果却变成了这样
[[1, 0], [1, 0], [1, 0]],即每各个子列表中的第一个元素全都自动加上了1

请问这是怎么回事?该怎么解决?
------解决方案--------------------

In [3]: b = [[0,0]]*3

In [4]: b[0] is b[1]
Out[4]: True

In [5]: c = [[0,0] for _ in range(3)]

In [6]: c[0] is c[1]
Out[6]: False

In [7]: c[0][1] = 1

In [8]: c
Out[8]: [[0, 1], [0, 0], [0, 0]]

------解决方案--------------------
使用*3重复生成的三个元素指向内存中的同一个list子对象[0,0],你可以用id()函数查看每个元素的id:

>>> b = [[0,0]]*3
>>> for x in b:
...     print id(x)
...
40032136
40032136
40032136


你可以浅拷贝第一个[0, 0],然后再赋值:

>>> b[0] = b[0][:]
>>> b[0][0] = 1
>>> b
[[1, 0], [0, 0], [0, 0]]

------解决方案--------------------
注意深浅复制,可变对象以及不可变对象。你想在使用过程中改变值,那就生成的时候打破b[0]---b[n]之间的关系,否则中途变其中一个是不可能的。