数据温习学习之路005——数组的浅拷贝、深拷贝
栈区:内存中的内存,运行快,空间小些
堆区:内存中的硬盘,运行稍慢,空间大些
不拷贝:b=a直接赋值,那么栈区没有拷贝,只是用了一个栈区定义了不同的名称
浅拷贝:c=a.view()只拷贝栈区,栈区指定的堆区并没有拷贝
深拷贝:d=a.copy()栈区和堆区都拷贝了
import numpy as np
a=np.arange(5)
print(a)# [0 1 2 3 4]
#不拷贝
b=a
print(a is b)#True
#浅拷贝
c=a.view()
print(c is a) #False
c[0]=100
print(a)
# [100 1 2 3 4]
#深拷贝
d=a.copy()
print(d is a)
# False
d[1]=100
print(a)
# [100 1 2 3 4]
print(d)
# [100 100 2 3 4]
例子:
flatten:深拷贝
ravel:浅拷贝
import numpy as np
a=np.arange(8).reshape(2,4)
#[[0 1 2 3]
# [4 5 6 7]]
print(a)
b=a.ravel()
b[0]=88
print(a)
'''[[88 1 2 3]
[ 4 5 6 7]]'''
#说明ravel是浅拷贝
a=np.arange(8).reshape(2,4)
print(a)
'''[[0 1 2 3]
[4 5 6 7]]'''
c=a.flatten()
c[1]=99
print(a)
'''[[0 1 2 3]
[4 5 6 7]]'''
# 原来的a没发生变化,说明flatten是深拷贝