numpy的无拷贝,视图(浅拷贝)和深拷贝( numpy.copy) 作者:马育民 • 2020-05-26 22:08 • 阅读:10078 # 无拷贝 赋值操作不会发生拷贝,2个引用指向同一个内存地址 ``` import numpy as np arr=np.array([0,1,3]) arr2=arr print(id(arr)) print(id(arr2)) ``` 执行结果: ``` 4495591744 4495591744 ``` 说明内存地址一样,没有发生拷贝 # 视图(浅拷贝) 调用view(),或 numpy的slice(切片)操作,会copy父对象,不会copy底层的数据。 如果在view上修改数据,会直接反馈到原对象,修改view的形状,则不会影响原对象 ``` import numpy as np arr=np.array([0,1,3]) # 切片 arr3=arr[:] # 下面代码效果相同 # arr3=arr.view() print(id(arr)) print(id(arr3)) ``` 执行结果: ``` 4495591744 4495806256 ``` 可知,内存地址不一样 ### 修改arr3的值,也会影响arr的值 ``` arr3[0]=100 print(arr) print(arr3) ``` 执行结果: ``` [100 1 3] [100 1 3] ``` ### 修改arr3的形状,则不会影响arr ``` arr3.shape = 1,3 print(arr) print(arr3) ``` 执行结果: ``` [100 1 3] [[100 1 3]] ``` # 深拷贝 对原数组对象及其子数组对象都进行copy一份,对新生成的数组对象进行 **修改删除** 操作不会影响到原对象。 ``` import numpy as np arr=np.array([0,1,3]) # 深拷贝 arr4=arr.copy() print(id(arr)) print(id(arr4)) ``` 执行结果: ``` 4618212256 4618212496 ``` 修改arr4的值,不会影响原数组 ``` arr4[0]=100 print(arr) print(arr4) ``` 执行结果: ``` [0 1 3] [100 1 3] ``` 感谢: https://blog.csdn.net/genghaihua/article/details/92806584?ops_request_misc=&request_id=&biz_id=102&utm_term=numpy.copy&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-92806584 原文出处:http://www.malaoshi.top/show_1EF5aw2o1Q8Y.html