python深度复制列表_np数组的深度复制

In [276]: array_of_arrays

Out[276]:

array([array([[0, 1, 2],

[3, 4, 5]]),

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]]),

array([[ 0, 1, 2, 3, 4],

[ 5, 6, 7, 8, 9],

[10, 11, 12, 13, 14],

[15, 16, 17, 18, 19]])], dtype=object)

array_of_arrays是dtype=object;这意味着数组的每个元素都是指向内存中其他位置的对象的指针。在这种情况下,这些元素是不同大小的数组。a = array_of_arrays[:]

a是一个新数组,但是array_of_arrays的视图;也就是说,它具有相同的数据缓冲区(在本例中是指针列表)。b = array_of_arrays[:][:]

这只是一个视图。第二个[:]作用于第一个的结果。c = np.array(array_of_arrays, copy=True)

这与array_of_arrays.copy()相同。c有一个新的数据缓冲区,即原始数据的副本

如果我替换c的元素,它不会影响array_of_arrays:c[0] = np.arange(3)

但是如果我修改c的一个元素,它将修改array_of_arrays中的同一个元素,因为它们都指向同一个数组。

同样的事情也适用于列表的嵌套列表。array添加的是view情况。d = np.array([np.array(x, copy=True) for x in array_of_arrays])

在本例中,您将复制各个元素。正如其他人所指出的,有一个deepcopy函数。它是为列表之类的东西而设计的,但也适用于数组。它基本上就是在递归地处理嵌套树。

通常,对象数组类似于列表嵌套。一些操作跨越对象边界,例如array_of_arrays+1

但即便如此np.array([x+1 for x in array_of_arrays])

与列表相比,对象数组添加的一件事是像reshape这样的操作。array_of_arrays.reshape(3,1)使其成为2d;如果它有4个元素,则可以执行array_of_arrays.reshape(2,2)。有时候这很方便;有时候这很痛苦(很难重复)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值