Python 简明教程

Python - Copy Arrays

在 Python 中,复制数组是指创建包含原始数组所有元素的新数组的过程。此操作可以使用赋值运算符 (=) 和 deepcopy() 方法完成。在本章中,我们将讨论如何 copy an array object to another 。但是,在进入详情之前,让我们简要讨论数组。

Python 的内置序列类型,即 listtuplestring 是按索引排列的项集合。但是,与 C/C++、Java 等语言中的数组不同,它们不是同构的,这意味着这些类型的集合中的元素可能属于不同类型。Python 的 array 模块可帮助你创建类似于 Java 数组的对象。

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

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

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

Copy Arrays Using Assignment Operator

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

Example

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

它将生成以下 output

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)

它将生成以下 output

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

Copy Arrays Using Deep Copy

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

Example

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

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

执行后,将产生以下 output

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

现在检查 "a" 和 "b" 的 id()。你会发现 id 是不同的。

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

它将生成以下 output

2771967069936 2771967068976

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

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

它将生成以下 output

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