Python 嵌套数组的奇怪行为

Python 嵌套数组的奇怪行为,python,arrays,Python,Arrays,假设我有一个嵌套数组,foo: >>> foo = [[" ", " "], [" ", " "]] >>> print foo2 [[" ", " "], [" ", " "]] 假设我想更改数组0的元素0。我会这样做: >>> foo[0][0] = "a" >>> print foo [["a", " "], [" ", " "]] 相反,假设foo等于: >>> foo2 = [[" "] *

假设我有一个嵌套数组,
foo

>>> foo = [[" ", " "], [" ", " "]]
>>> print foo2
[[" ", " "], [" ", " "]]
假设我想更改数组
0
的元素
0
。我会这样做:

>>> foo[0][0] = "a"
>>> print foo
[["a", " "], [" ", " "]]
相反,假设
foo
等于:

>>> foo2 = [[" "] * 2] * 2
如果我打印
foo2
,我仍然会得到与原始
foo
相同的结果:

>>> foo = [[" ", " "], [" ", " "]]
>>> print foo2
[[" ", " "], [" ", " "]]
但是,如果我尝试更改
foo2
中的一个元素,我将得到以下结果:

>>> foo2[0][0] = "a"
>>> print foo2
[["a", " "], ["a", " "]]

如您所见,它不是只替换数组
0
的元素
0
,而是替换所有数组中的元素
0
。是什么导致了这种奇怪的行为?

print
foo2[0]是您的shell@PadraicCunningham所以,当我尝试修改一个数组时,所有数组的结果都是一样的?是的,您正在创建指向同一对象的指针,因此一次更改将影响所有对象。虽然这可能会创建列表引用而不是副本,但这肯定是违反直觉的-我本来希望这会创建与foo完全相同的结构,因为这是一种非常标准的初始化方法python@gkusner,这根本不是创建列表的标准方法