numpy中的浅复制和深复制

  浅复制:主要有两种方式,简单的赋值或者使用视图(view)

  简单的赋值:其实就是制造了一个别名,数组并没有被copy成新的一份,当使用其中一个别名改变数组值的时候,另一个别名对应的值一并改变。  

>>>a = np.arange(12)
>>>a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>>b = a
>>>b is a
True
>>>b.shape = 3,4
>>>b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

  

  视图:就是制造了一个原数组的在numpy中定义为view的东西,新视图的base是原数组,区别在于新视图可以和原数组有不同的shape,但当视图的值改变,原数组的值也会发生改变。需要注意的是数组的切片其实就是生成视图的过程。如c = a[:],其实就是生成了和a形状相同的a的view(完全切片)。

>>>a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>c = a.view
>>>c is a
False
>>>c.base is a
True
>>>c.shape = 12
>>>c[0] = 520
>>>a
array([[520,   1,   2,   3],
       [  4,   5,   6,   7],
       [  8,   9,  10,  11]])

  

  深复制:就是制作一份原数组的copy了。

>>>d = a.copy()
>>>d[0][0] = 1314
>>>d
array([[1314,    1,    2,    3],
       [   4,    5,    6,    7],
       [   8,    9,   10,   11]])
>>>a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
原文地址:https://www.cnblogs.com/chester-cs/p/11839601.html