Python:复制 `array.array`

标签 python arrays copy

有没有办法复制 array.array (不是列表)在Python中,除了创建一个新列表并复制值之外,还是使用.to_something.from_something?我似乎在文档中找不到任何内容。如果没有,是否有类似的内置数据类型可以做到这一点?

我正在开发一个高性能模块,所以答案越快越好。

我当前的解决方案仅使用 .to_bytes.from_bytes,根据我的测试,速度大约快 1.8 倍。

最佳答案

不确定您的array.array包含什么,但使用示例:

>>> import array
>>> a = array.array('i', [1, 2, 3] * 1000)
array('i', [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1,
2, 3, 1, 2, 3, 1, 2, 3, 1, 2, ... ])

一些设置:

>>> from copy import deepcopy
>>> import numpy as np

对各种方法进行计时

(在 Jupyter Notebook 中使用 %timeit 魔法):

切片

In [1]: %timeit cp = a[:]

418 ns ± 4.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

深拷贝

In [2]: %timeit cp = deepcopy(a)

1.83 µs ± 34 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

numpy copy ... 注意:这会生成一个 numpy 数组,而不是 array.array

In [3]: %timeit cp = np.copy(a)

1.87 µs ± 62.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

列表理解和 array.array 转换

In [4]: %timeit cp = array.array('i', [item for item in a])

147 µs ± 5.39 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

numpy 复制和 array.array 转换

In [5]: %timeit cp = array.array('i', np.copy(a))

310 µs ± 2.25 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

复制到现有数组

In[6]: pre = array.array('i', [0, 0, 0] * 1000)
In[7]: %timeit for i, element in enumerate(a): pre[i] = a[i]

344 µs ± 7.83 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于Python:复制 `array.array`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48106028/

相关文章:

python 猜测具体路径?

python - 如何从字典中删除列表值?

java - 如何修复 "this method must return boolean type"错误

java - 在maven pom.xml中,如何指定我要将 ".xml"文件复制到我的目标文件夹中?

java - 使用 apache IOUtils.copy() 和 setContent() 复制文档内容

c++ - 如何从命令行编译 Visual Studio 项目?

javascript - 如何将 true 或 false 的 const 列表排序为两个单独的数组,一个包含 true 对象,另一个包含 false 对象?

python - 20 x 20 block 数组中的坐标对列表

java - 尽管成功复制文件,但 SMB-FS 上的 Gradle 复制作业失败

python - 类对象的动态实例相互覆盖