一.不复制
import numpy as np
a = np.arange(12)
print(a)
b=a #不会有新对象产生
print(b is a)
print(b.shape)
b.shape = 3, 4 #改变b的shape,a也同样变化
print(a.shape)
print(a)
[ 0 1 2 3 4 5 6 7 8 9 10 11]
True
(12,)
(3, 4)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
python中使用可变参数时,可以看做是引用传参,因此函数条用会产生新的数组.
def f(x):
print(id(x))
print(id(a))
print(f(a))
2011236917040
2011236917040
二、视图(View)和浅复制(Shallow Copy)
不同的数组可以共享数据,view
函数可以创造一个数据相同的新数组。
a=np.array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
c = a.view()
print(c) #c输出和a一样
print(c is a) #c和a不是一个数组
print(c.base is a)# c是a的数据的视图
print(c.flags.owndata)# c并不拥有数据
print(a.flags.owndata)#a拥有数据
c.shape = 2, 6