Python - numpy和list中的浅拷贝和深拷贝

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]

猜你喜欢

转载自blog.csdn.net/weixin_39129504/article/details/86447677
今日推荐