# numpy深拷贝示例
In [12]: arr = np.zeros((3,3))
In [13]: arr
Out[13]:
array([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In [14]: b = arr.copy()
In [17]: b[0,0]=1# 更改b的值
In [18]: arr # arr不变,说明copy()方法是深拷贝
Out[18]:
array([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In [19]: b
Out[19]:
array([[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]])# numpy浅拷贝示例
In [33]: b = arr # 直接赋值给变量b
In [34]: b
Out[34]:
array([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In [35]: arr[0,0]=1
In [36]: b
Out[36]:
array([[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In [38]: b = arr[:]# 切片操作
In [39]: b
Out[39]:
array([[1.,0.,0.],[0.,0.,0.],[0.,0.,0.]])
In [40]: arr[0,2]=1
In [41]: b
Out[41]:
array([[1.,0.,1.],[0.,0.,0.],[0.,0.,0.]])
对比:Python的list中
切片操作 是 深拷贝
直接复制给另一个变量是 浅拷贝
# list 深拷贝示例
In [7]: a =[1,2]
In [8]: b = a[:]
In [9]: b[0]=0# 更改b的值
In [10]: a # a不变,说明列表中的切片操作是深拷贝
Out[10]:[1,2]# list 浅拷贝示例
In [29]: a =[1,2]
In [30]: b = a
In [31]: a[0]=0
In [32]: b
Out[32]:[0,2]