在 Python 中复制二维数组

Isaac Tony 2023年1月30日
  1. 使用 NumPy copy() 函数创建二维数组的副本
  2. 使用 copy.deepcopy() 函数创建二维数组的副本
  3. 在 Python 中创建二维数组的浅拷贝
在 Python 中复制二维数组

二维数组是以行和列表示数据的数组数组。

可以使用两个索引访问二维数组中的元素。第一个索引是指数组中的子数组,第二个索引是指各个元素。

二维数组遵循以下语法。

array_name = [[d1, d2, d3, d4, ..., dn], [c1, c2, c3, c4, ...., cn]]

第一个子数组代表行,而第二个子数组代表表的列。

制作对象的副本是处理和修改数组的一个重要方面。

这使我们可以自由地迭代和修改诸如数组之类的对象而不会遇到错误。创建副本还允许我们保留原始对象,而不是对副本执行操作。

Python 提供了一系列工厂函数,可用于在 Python 中创建数组或任何其他可变对象的副本。这些可变对象包括字典、集合和列表。

使用 NumPy copy() 函数创建二维数组的副本

NumPy 提供了 copy() 功能。copy() 函数可以实现如下所示。

import numpy as np

x = np.array([[23, 34, 45], [24, 45, 78]])

y = x.copy()
print(y)

# making changes to the copy of array
y[0][2] = 65
print(y)

# printing original 2d array
print(x)

输出:

[[23 34 45]
 [24 45 78]]
[[23 34 65]
 [24 45 78]]
[[23 34 45]
 [24 45 78]]

在示例代码中,我们创建了原始数组的副本并更改了副本。但是,我们保留了数组的原始副本,打印在最后一行。

使用 copy.deepcopy() 函数创建二维数组的副本

使用深拷贝功能,我们可以通过递归地将原始对象中的对象添加到新对象中来创建新的复合对象。

这意味着对新对象(一个数组)所做的更改不会影响原始数组。我们将使用 copy 模块中可用的 deepcopy() 函数来实现此方法。

复制模块提供了从 Python 对象(例如列表和数组)复制元素的功能。deepcopy() 函数可用于创建二维数组的副本,如下例所示。

import copy

x = [[24, 23, 25], [32, 43, 54]]
y = copy.deepcopy(x)
# a copy of the original array
print(y)
# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

输出:

[[24, 23, 25], [32, 43, 54]]
[[24, 23, 100], [32, 43, 54]]
[[24, 23, 25], [32, 43, 54]]

在 Python 中创建二维数组的浅拷贝

同样,浅拷贝方法也会创建一个复合对象来表示原始对象。与插入原始对象的副本的深拷贝不同,浅拷贝仅引用原始对象中的对象。

因此,浅拷贝不会递归,只允许我们将一个对象的引用复制到另一个对象中。这意味着一个对象的变化不会影响另一个对象。

如下所示,可以使用 view() 函数实现浅拷贝。

import numpy as np

x = np.array([[24, 23, 25], [32, 43, 54]])

y = x.view()

# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

输出:

[[ 24  23 100]
 [ 32  43  54]]
[[ 24  23 100]
[ 32  43  54]]

在这种情况下,更改一个数组的值会更改原始数组中的值。但是,这两个数组仍然引用不同的对象。

使用 id() 函数,我们可以验证两个数组是否引用了不同的对象。这是一个返回对象标识的内置函数,可以如下所示实现。

import numpy as np

x = np.array([[24, 23, 25], [32, 43, 54]])
print(id(x))

y = x.view()

print(id(y))
# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

输出:

139636169252912
139636169253008
[[ 24  23 100]
 [ 32  43  54]]
[[ 24  23 100]
 [ 32  43  54]]

或者,我们也可以使用 copy() 函数创建二维数组的浅拷贝。

copy 模块提供了 copy() 函数,该函数提供了不同的函数来复制列表、数组和其他对象中的元素。如下所示,可以实现 copy 函数来创建浅拷贝。

import numpy as np
import copy

x = np.array([[24, 23, 25], [32, 43, 54]])

y = copy.copy(x)

# a copy of the original array

# making changes to the copy of the array
y[0][2] = 100
print(y)

# original array
print(x)

输出:

[[ 24  23 100]
 [ 32  43  54]]
[[24 23 25]
 [32 43 54]]
作者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

相关文章 - Python Array