Cython:我如何知道给对象分配引用或分配具有相同值的对象副本?

时间:2019-01-28 16:03:21

标签: cython

在Python中,我可能有:

for k, v in mydict:
    l = v
    l.set_to_one()

print(l._one)

for k, v in mydict:
    print(v._one)

,这应该显示一系列(其中_one是整数)。

当我这样做

a=1
b=a
a=2
print(a)
print(b)

先打印2,再打印1。

在Cython中,如果我显式设置类型或通过Cython扩展名创建对象,那么如何通过=运算符为它分配引用或值(我不是使用外部C ++代码)?它是否始终遵循C规则,或者偶尔遵循Python规则?是否取决于我使用的是list还是dict之类的Python内置类型?

1 个答案:

答案 0 :(得分:0)

对于任何Python对象(即,您尚未指定类型,您已将其指定为cdef object或已将其指定为特定的cdef class)规则与Python完全相同。这主要是作为参考,但是字符串和数字是不可变的。目的之一是有效的Python代码在Cython中应能相同地工作,因此,在开始指定C类型之前,什么都不应更改。

对于任何已指定C或C ++类型的内容,规则将与C或C ++相同。尽管指针和C ++ &引用也提供了传递引用的方法,但大部分内容都是按“值”复制的。

Cython会自动计算并修复少量类型。据我所知,数字中变量显然只能容纳数字。由于数字是不可变的,并且是通过“值” Python处理的,因此这不应影响行为。