Numba - 来自 jitted 函数的参数(numpy 数组)的内存地址

Numba - memory address of argument (numpy array) from inside jitted function

我试图检查 numba 是按值还是按引用传递参数,所以我这样写:

@numba.jit(nopython=True)
def f(x):
    return id(x)

当 运行 时,结果是:

TypingError: cannot determine Numba type of <class 'builtin_function_or_method'>

这完全有道理(我知道 id 不一定是内存地址,但这就是我的想法)。然而:

  1. 如何在 jitted 函数中获取参数的内存地址?

  2. numba 是按值还是按引用传递参数(我如何验证这一点)?

id 的调用而言,您只能使用 python 中列出的功能:

http://numba.pydata.org/numba-doc/latest/reference/pysupported.html

我的理解是 numba 遵循 python 的按引用传递与按值传递的约定(尽管实际上两者都不完全相同)。它更像是按对象调用。像标量这样的不可变对象就像按值传递一样。列表和数组等可变对象的行为类似于引用。

确认这一点的最简单方法就是尝试传入不同参数类型的变量,在函数内修改它们,看看它们在调用函数后是否发生变化。