【问题标题】:Python: Create a duplicate of an arrayPython:创建数组的副本
【发布时间】:2011-01-27 23:34:05
【问题描述】:

我有一个双数组

alist[1][1]=-1
alist2=[]
for x in xrange(10):
    alist2.append(alist[x])
alist2[1][1]=15

print alist[1][1]

我得到 15。显然我传递的是一个指针而不是一个实际的变量...有没有一种简单的方法来制作一个 单独的双数组(没有共享指针)没有必须做一个双循环

谢谢, 丹

【问题讨论】:

    标签: python list pointers arrays


    【解决方案1】:

    如果您已经在列表中循环,那么按照 seanmonstar 的回答,只要复制内部列表是最简单的。

    如果您只想对列表进行深层复制,您可以致电copy.deepcopy()

    【讨论】:

      【解决方案2】:

      我认为copy.deepcopy() 仅适用于这种情况。

      【讨论】:

        【解决方案3】:

        您可以使用somelist[:],即从头到尾类似于somelist[1:2] 的切片,来创建列表的(浅)副本。将此应用于您的 for 循环给出:

        alist2 = []
        for x in xrange(10):
           alist2.append(alist[x][:])
        

        这也可以写成列表推导式:

        alist2 = [item[:] for item in alist]
        

        【讨论】:

          【解决方案4】:

          列表列表通常不是制作二维数组的好方法。您可能想要使用 numpy,它提供了一种非常有用、高效的 n 维数组类型。 numpy 数组可以被复制。

          通常比普通列表更好的其他解决方案包括以元组为键的字典(d[1, 1] 将是 1, 1 组件)或定义您自己的二维数组类。当然,dicts 可以被复制,你可以为你的班级抽象复制。

          要复制列表列表,您可以使用copy.deepcopy,复制时会加深一层。

          【讨论】:

            【解决方案5】:

            追加时复制列表。

              alist2.append(alist[x][:])
            

            【讨论】:

              【解决方案6】:

              通常你可以这样做:

              new_list = old_list[:]
              

              所以你也许可以把它放在你的单数 for 循环中?

              for x in range(10):
                  alist2.append(alist[x][:])
              

              【讨论】:

                猜你喜欢
                • 2012-05-16
                • 1970-01-01
                • 2015-02-15
                • 2013-12-06
                • 1970-01-01
                • 2017-01-14
                • 2018-11-30
                • 2019-08-18
                相关资源
                最近更新 更多