Python - 复制数组



在 Python 中,复制数组是指创建包含原始数组的所有元素的新数组的过程。可以使用赋值运算符 (=) 和 deepcopy() 方法完成此操作。在本章中,我们将讨论如何将数组对象复制到另一个数组对象。但是,在进入细节之前,让我们先简单讨论一下数组。

Python 的内置序列类型(即 listtuple string)是项目的索引集合。然而,与 C/C++、Java 等中的数组不同,它们不是同质的,从某种意义上说,这些类型的集合中的元素可能属于不同的类型。Python 的数组模块可帮助您创建类似于 Java 的数组的对象。

Python 数组可以是字符串、整数或浮点类型。数组类构造函数的使用方式如下 -


import array
obj = array.array(typecode[, initializer])

其中,类型代码可以是表示数据类型的字符常量。

使用赋值运算符复制数组

我们可以使用赋值运算符 (=) 将一个数组分配给另一个数组。但是,此类赋值不会在内存中创建新数组。相反,它会创建对同一数组的新引用。

在下面的示例中,我们使用赋值运算符在 Python 中复制数组。


import array as arr
a = arr.array('i', [110, 220, 330, 440, 550])
b = a
print("Copied array:",b)
print (id(a), id(b))

它将产生以下输出 -

Copied array: array('i', [110, 220, 330, 440, 550])
134485392383792 134485392383792

检查 a 和 b 的 id()。相同的 id 值确认简单赋值不会创建副本。由于 “a” 和 “b” 指的是同一个数组对象,数组 “a” 中的任何变化也会反映在 “b” 中 −


a[2] = 10
print (a,b)

它将产生以下输出 -

array('i', [110, 220, 10, 440, 550]) array('i', [110, 220, 10, 440, 550])

使用 Deep Copy 复制数组

要创建数组的另一个物理副本,我们使用 Python 库中的另一个名为 copy 的模块,并在该模块中使用 deepcopy() 函数。深层副本构造一个新的复合对象,然后递归地将原始对象中找到的对象的副本插入其中。

以下示例演示了如何在 Python 中复制数组 -


import array as arr
import copy
a = arr.array('i', [110, 220, 330, 440, 550])
b = copy.deepcopy(a)
print("Copied array:",b)

在执行时,它将产生以下输出 -

Copied array: array('i', [110, 220, 330, 440, 550])

现在检查 “a” 和 “b” 的 id() 。您会发现 ID 不同。


 print (id(a), id(b))

它将产生以下输出 -

2771967069936 2771967068976

这证明创建了一个新对象 “b”,它是 “a” 的实际副本。如果我们更改了 “a” 中的元素,它不会反映在 “b” 中。


a[2]=10
print (a,b)

它将产生以下输出 -

array('i', [110, 220, 10, 440, 550]) array('i', [110, 220, 330, 440, 550])