numpy 中
np.copy()方法是 深拷贝;- 切片操作 是 浅拷贝;
- 直接赋值给另一个变量是 浅拷贝。
# 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]
来源:CSDN
作者:MonteYang
链接:https://blog.csdn.net/weixin_39129504/article/details/86447677