Python - 复制数组


Python 的内置序列类型(即列表、元组和字符串)是索引项的集合。然而,与 C/C++、Java 等中的数组不同,它们不是同质的,从某种意义上说,这些类型的集合中的元素可能属于不同类型。Python 的数组模块可帮助您创建类似于 Java 数组的对象。在本章中,我们讨论如何将数组对象复制到另一个数组对象。

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

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

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

我们可以通过赋值运算符将一个数组分配给另一个数组。

a = arr.array('i', [1, 2, 3, 4, 5])
b=a.copy()

但是,此类分配不会在内存中创建新数组。在Python中,变量只是内存中对象的标签或引用。因此,a 是对数组的引用,b 也是如此。检查a 和b 的id()。相同的 id 值确认简单赋值不会创建副本

import array as arr
a = arr.array('i', [1, 2, 3, 4, 5])
b=a
print (id(a), id(b))

它将产生以下输出-

2771967068656 2771967068656

因为“a”和“b”引用相同的数组对象,所以“a”中的任何更改也会反映在“b”中 -

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

它将产生以下输出-

array('i', [1, 2, 10, 4, 5]) array('i', [1, 2, 10, 4, 5])

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

import array, copy
a = arr.array('i', [1, 2, 3, 4, 5])
import copy
b = copy.deepcopy(a)

现在检查“a”和“b”的 id()。你会发现id不一样。

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

它将产生以下输出-

2771967069936 2771967068976

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

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

它将产生以下输出-

array('i', [1, 2, 10, 4, 5]) array('i', [1, 2, 3, 4, 5])