我们看看如何在 Python 中复制数组。

有 3 种复制数组的方法:

  • 只需使用赋值运算符。
  • 浅拷贝
  • 深拷贝

1 使用赋值运算符

我们可以使用赋值运算符 (=) 创建数组的副本。

语法:

new_arr = old_ arr

在 Python 中,Assignment 语句不复制对象,它们在目标和对象之间创建绑定。 当我们使用 = 运算符时,用户认为这会创建一个新对象; 好吧,事实并非如此。 它只创建一个共享原始对象引用的新变量。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from numpy import *                  

  

arr1 = array([2, 6, 9, 4])            

  

print(id(arr1))

  

arr2 = arr1                         

  

print(id(arr2))

  

arr1[1] = 7                        

  

print(arr1)

print(arr2)

我们可以看到两个数组都引用了同一个对象。

2 浅拷贝

一个浅副本意味着构造一个新的集合对象,然后用对原始中找到的子对象的引用填充它。 复制过程不会重复,因此不会创建子对象本身的副本。 在浅拷贝的情况下,对象的引用被复制在另一个对象中。 这意味着对对象的副本所做的任何更改都会在原始对象中反映。 我们将使用视图view()函数来实现浅副本。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from numpy import *                 

   

arr1 = array([2, 6, 9, 4])

  

print(id(arr1))

  

arr2 = arr1.view() 

  

print(id(arr2))

   

arr1[1] = 7                       

   

print(arr1)

print(arr2)

这次虽然2个数组引用了不同的对象,但在更改一个数组值的时候,另一个的值也被更改。

3 深度拷贝

深度拷贝是一个过程,其中复制过程递归地发生。 它意味着首先构建一个新的存储对象,然后用原稿中找到的子对象的副本递归地填充它。 在深度拷贝的情况下,将对象的副本复制到另一个对象中。 这意味着对对象的副本所做的任何更改都不反映在原始对象中。 我们将使用copy()函数来实现深度副本。

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

from numpy import *                 

   

arr1 = array([2, 6, 9, 4])

  

print(id(arr1))

  

arr2 = arr1.copy()

  

print(id(arr2))

   

arr1[1] = 7                       

   

print(arr1)

print(arr2)

这次在一个数组中所做的更改不会映射在其他数组中。

4 深度拷贝进阶

如果您正在处理numpy矩阵,则numpy.copy()将为您提供深度拷贝。 但是,如果您的矩阵是列表的列表,那么请考虑旋转图像90度的任务中使用。

来源:https://www.weidianyuedu.com

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐