Python - 数组复制



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

Python 的内置序列类型,即 列表元组字符串,都是项目的索引集合。但是,与 C/C++、Java 等中的数组不同,它们不是同构的,这意味着这些类型的集合中的元素可能属于不同的类型。Python 的 array 模块可以帮助您创建类似于 Java 数组的对象。

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

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

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

使用赋值运算符复制数组

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

示例

在下面的示例中,我们使用赋值运算符在 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])

使用深拷贝复制数组

要创建数组的另一个物理副本,我们使用 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])
广告