拷贝理解
![拷贝理解](https://i-blog.csdnimg.cn/blog_migrate/d8e31eb51e108a6818d92e2c46d7207f.png#pic_center)
- 内存里面分为栈区和堆区
栈区:理解为内存中的内存,内存运行速度快,但是存储的数据小;
堆区:理解为内存中的硬盘,硬盘运行速度慢,但是存储的数据大;
数组数据实际上是存储在堆区当中,但从堆区中提取数组会很慢,因此在栈区中存储一个变量指向堆区中的数组,这样保证提取数据的效率,也增大了数据存储的容量;
不拷贝
![不拷贝](https://i-blog.csdnimg.cn/blog_migrate/b8a24e43a35827e1680ca5f3dcfdaf70.png#pic_center)
- 不拷贝:只是简单的复制,比如arr1 = arr,也就是说,arr1和arr变量指向堆区的内存空间一致
import numpy as np
arr = np.array([1,2,3,4])
arr1 = arr
arr1 is arr
arr1[1] = 20
arr1
arr
浅拷贝
![浅拷贝](https://i-blog.csdnimg.cn/blog_migrate/422b8a03ff94b863096f0118def62b39.png#pic_center)
- 浅拷贝:在栈区重新开辟一块内存空间指向堆区arr1 = arr.view();注意:当我通过arr1去修改堆区某元素的值,那arr访问的就是改变后的值。
import numpy as np
arr = np.array([1,2,3,4])
arr1 = arr.view()
arr1 is arr
arr1[1] = 20
arr1
arr
深拷贝
![深拷贝](https://i-blog.csdnimg.cn/blog_migrate/6eb1c9d3913b899476c63e7e83b20071.png#pic_center)
- 深拷贝:在栈区重新开辟一块内存空间,指向堆区重新开辟的一块内存空间。
import numpy as np
arr = np.array([1,2,3,4])
arr1 = arr.copy()
arr1 is arr
arr1[1] = 20
arr1
arr