我问的原因是因为可以在没有GIL的情况下在Cython中对内存视图进行操作,并且不会以某种方式标记它们不被移动。例如:
def f(double[:] z):
cdef int i, n = len(z)
with nogil:
for i in prange(n):
z[i] += 1.5
这与Java中的情况不同,在Java中,您必须获取并释放数组,以防止在外部代码中使用它们时GC移动它们。因此,要么在幕后发生一些标记或获取/释放事件,要么Python垃圾收集器永远不会移动数组,这似乎暗示垃圾收集器是非复制的。
首先,我是对的,它是非复制的吗?这是一种有保证的,有文档记录的语言功能,这意味着任何想要称自己为“python解释器”的东西都必须有一个非复制的垃圾收集器吗?