【问题标题】:Difference in 2D array initialization [duplicate]二维数组初始化的差异[重复]
【发布时间】:2021-11-20 19:55:48
【问题描述】:

这是一个我觉得令人费解的 sn-p。为什么y[0][0] = 2会初始化所有行中的所有列?

Python 3.8.10 (default, Jun  2 2021, 10:49:15) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = []
>>> x.append([0])
>>> x.append([0])
>>> x.append([0])
>>> x.append([0])
>>> x
[[0], [0], [0], [0]]
>>> y = [ [0] * 1 ] * 4
>>> y
[[0], [0], [0], [0]]
>>> x == y
True
>>> x[0][0] = 2
>>> y[0][0] = 2
>>> x
[[2], [0], [0], [0]]
>>> y
[[2], [2], [2], [2]]
>>> 

【问题讨论】:

    标签: python multidimensional-array


    【解决方案1】:

    y = [ [0] * 1 ] * 4 行中,Python 解释器实际上在做的是创建一个列表,其中包含指向同一对象的 4 个指针。您实际上是在创建一个列表 [0] 和对同一列表的 4 个引用。当您更改其中一个时,您将更改所有这些。

    【讨论】:

      【解决方案2】:

      这与你初始化y的方式有关:

      y = [ [0] * 1 ] * 4
      

      这基本上是说“创建一个包含单个元素的列表,0”。然后它说'将该列表四次放入一个新列表中'。因此,如果您更改原始列表,您将更改您创建的所有后续副本(实际上是引用),因为它们每个都指向同一块内存。

      【讨论】:

        猜你喜欢
        • 2018-12-09
        • 2019-02-10
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多