Python2D数组索引:设置值更改整个列?

Python2D数组索引:设置值更改整个列?,python,Python,这可能是一个非常愚蠢的问题,但我不理解以下代码: >>> a=[[0]*3]*3 >>> a [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> a[0][1]=3 >>> a [[0, 3, 0], [0, 3, 0], [0, 3, 0]] 为什么调用a[0][1]会将整个第二列初始化为3?这是因为a[0][1]实际上是对相同列表的引用。使用*运算符将元素复制到列表中时,这些重复元素不会单独存储

这可能是一个非常愚蠢的问题,但我不理解以下代码:

>>> a=[[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][1]=3
>>> a
[[0, 3, 0], [0, 3, 0], [0, 3, 0]]

为什么调用a[0][1]会将整个第二列初始化为3?

这是因为
a[0][1]
实际上是对相同列表的引用。使用*运算符将元素复制到列表中时,这些重复元素不会单独存储在内存中。它们指向同一个列表,因此如果修改一个列表,所有列表都将被修改。

Mac10.10.3上的python 2.7.5我明白了。我被一些关于堆栈溢出的回答误导了,说这会初始化一个二维数组。但事实并非如此。