上来就飙代码
import numpy as np
a = np.arange(12)
b = a # 完全不拷贝
print(b is a) # True
print(id(a),id(b))
c = a.view() # 视图(浅拷贝)
print('\n',c is a) # False
print(c.base is a) # True
c.shape = 2,6
print(a.shape)
c[1,2] = 999
print(a)
print(id(a),id(c))
s = a[1:6] # 切片是一种视图
s[:] = 888
print('\n',a)
d = a.copy() # 深拷贝
print('\n',d is a) # False
print(d.base is a) # False
d[4] = 777
print(a)
print(d)
print(id(a),id(d))
完全不拷贝:a与b共用同一个地址(b=a),a和b指的是同一个内容,只是叫法不一样,内容地址都一样,所以改变a,b也会变。
视图(.view): c = a.view() c是a 的视图,可以理解为c是虚拟的,c里面没有内容,他只是将a的内容展示出来,但是它俩的地址不一样。改变c的值,a也会改变,但是改变c 的形状a 并不会改变。
深拷贝:(.copy):完全是两个东西,只是借用内容,相当于在电脑上复制一个文件到其他地方,文件内容一样,但是地址不同,之后任意改变一个文件,另一个不会改变,相互独立。