Python 复制数组
Python的内置序列类型,即列表、元组和字符串是索引集合。然而,与C/C++、Java等不同的是,它们不是同质的,也就是说这些类型的集合中的元素可能是不同类型的。Python的数组模块可以帮助您创建类似于Java的数组对象。在本章中,我们讨论如何将一个数组对象复制到另一个数组对象中。
Python的数组可以是字符串、整数或浮点数类型的。数组类构造函数的用法如下−
import array
obj = array.array(typecode[, initializer])
typecode 可以是一个表示数据类型的字符常量。
我们可以通过赋值操作符将一个数组分配给另一个数组。
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])