Python乘法运算符

时间:2012-03-30 20:30:15

标签: python

  

可能重复:
  Python list confusion

我是python的新手。请让我知道为什么stairlist [1] [0] = 2语句在使用stairlist = [[0,0]] * 8初始化时会更改所有值。

>>> stairlist = [[0,0]] * 8
>>> stairlist
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
>>> stairlist[1][0] = 2
>>> stairlist
[[2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0]]

但是当我根据以下内容初始化stairlist变量时,它可以正常工作。

>>> stairlist = [[1,2],[1,2]]
>>> stairlist
[[1, 2], [1, 2]]
>>> stairlist[1][1] = 3
>>> stairlist
[[1, 2], [1, 3]]

1 个答案:

答案 0 :(得分:1)

array * number将通过对原始数组中的每个对象进行浅层复制来创建一个新数组。

因为[0,0]本身就是一个数组,因而是一个正确的对象,所以新数组只包含一堆对同一个[0,0]数组的引用。当你改变一个时,你就改变了所有这些。

进行比较:

simplelist = [0] * 8
[0, 0, 0, 0, 0, 0, 0, 0]
simplelist[1] = 2
[0, 2, 0, 0, 0, 0, 0, 0]