有没有办法在Python中复制array.array
(不是list
),除了创建一个新的并复制值,或使用.to_something
和.from_something
?我似乎无法在文档中找到任何内容。如果没有,是否有类似的内置数据类型可以做到这一点?
我正在开发一个高性能模块,所以答案越快越好。
我目前的解决方案是使用.to_bytes
和.from_bytes
,这比我的测试快了1.8倍。
答案 0 :(得分:1)
不确定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
<强>切片强>
In [1]: %timeit cp = a[:]
418 ns ± 4.89 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
<强> deepcopy的强>
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 copy和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)
答案 1 :(得分:0)
copy.copy(arr)
可以正常使用。