Python - 复制数组
在 Python 中,复制数组是指创建一个包含原始数组所有元素的新数组的过程。此操作可以使用赋值运算符 (=) 和 deepcopy() 方法来完成。在本章中,我们讨论如何将一个数组对象复制到另一个。但在深入细节之前,让我们先简要讨论数组。
Python 内置的序列类型,即 list、tuple 和 string,是索引的项集合。然而,与 C/C++、Java 等语言中的数组不同,它们不是同质的,即这些集合中的元素可以是不同类型。Python 的 array 模块可以帮助你创建类似于 Java 数组的对象。
Python 数组可以是 string、integer 或 float 类型。array class 的构造函数使用如下 −
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])