视图与拷贝(.view&.copy)

上来就飙代码

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))

视图与拷贝(.view&.copy)_第1张图片

完全不拷贝:a与b共用同一个地址(b=a),a和b指的是同一个内容,只是叫法不一样,内容地址都一样,所以改变a,b也会变。

视图(.view): c = a.view()   c是a 的视图,可以理解为c是虚拟的,c里面没有内容,他只是将a的内容展示出来,但是它俩的地址不一样。改变c的值,a也会改变,但是改变c 的形状a 并不会改变。

深拷贝:(.copy):完全是两个东西,只是借用内容,相当于在电脑上复制一个文件到其他地方,文件内容一样,但是地址不同,之后任意改变一个文件,另一个不会改变,相互独立。

 
 

你可能感兴趣的:(语言基础,python,开发语言)