如何在不完全破坏性能的情况下修改 Numba 中的列表?

How to modify a list in Numba without completely destroying performance?

举个例子。如果你 运行 这段代码,它会打印出调用 foo:

大约需要 1 秒的时间
import timeit
import numba

@numba.njit('void(List(intp, True))')
def foo(v): v[0] += 1

a = range(1 << 25)
start = timeit.default_timer()
foo(a)
stop = timeit.default_timer()
print stop - start

显然 Numba 正在来回复制列表。有什么办法可以避免吗?
(我不能轻易使用 NumPy 数组,因为我需要在我的代码中的其他地方调整列表的大小。)

如果你真的需要在 Numba 中使用一个列表,并且副本太昂贵,你将需要在对象模式下编译这个函数。 nopython 模式不能直接对列表进行操作;这样做基本上是一个 Python 对象操作,nopython 模式禁止这样做。