← 返回首页
View或者浅拷贝
发表时间:2024-01-16 08:13:05
View或者浅拷贝

View或者浅拷贝。

1.不拷贝

如果只是简单的赋值,那么就不会进行拷贝,只是用同一个栈区定义了不同的名称。

import numpy as np
a = np.arange(12)
#这种情况不会进行拷贝
b = a
#返回True,说明b和a是相同的
print(b is a)

True

2.浅拷贝

有些情况,会进行变量的拷贝,但是他们所指向的内存空间都是一样的,那么这种情况叫做浅拷贝,或者叫做View(视图)。

c = a.view()
#返回false,说明c与a在栈区空间不同,但是所指向的内存空间是一样的
print(c is a)
#对c的值修改 同时也会对a进行修改
c[0] = 100
#array([100,1,2,3,4,5,6,7,8,9,10,11])
print(a)
print(c)

False
[100   1   2   3   4   5   6   7   8   9  10  11]
[100   1   2   3   4   5   6   7   8   9  10  11]

3.深拷贝

将之前数据完完整整的拷贝一份放到另外一块内存空间中,这样就是两个完全不同的值了。

d = a.copy()
#返回False 说明在不同栈区
print(d is a)
#数组d值被修改,数组a值不会被修改 说明内存空间不同
d[0]=200

print(a)
print(d)

False
[100   1   2   3   4   5   6   7   8   9  10  11]
[200   1   2   3   4   5   6   7   8   9  10  11]

小结:

在数组操作中分成三种拷贝: 1. 不拷贝:直接赋值,那么栈区没有拷贝,只是用同一个栈区定义了不同的名称。 2. 浅拷贝:只拷贝栈区,栈区指定的堆区并没有拷贝。 3. 深拷贝:栈区和堆区都拷贝。