首页 > 解决方案 > Numba - 来自jited函数内部的参数(numpy数组)的内存地址

问题描述

我试图检查是否numba通过值或引用传递参数,所以我写了这个:

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

运行时,结果如下:

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

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

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

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

标签: pythonnumba

解决方案


就对 的调用而言id,您只能使用以下所列的 Python 功能:

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

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

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


推荐阅读