在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内置类型?
答案 0 :(得分:0)
对于任何Python对象(即,您尚未指定类型,您已将其指定为cdef object
或已将其指定为特定的cdef class
)规则与Python完全相同。这主要是作为参考,但是字符串和数字是不可变的。目的之一是有效的Python代码在Cython中应能相同地工作,因此,在开始指定C类型之前,什么都不应更改。
对于任何已指定C或C ++类型的内容,规则将与C或C ++相同。尽管指针和C ++ &
引用也提供了传递引用的方法,但大部分内容都是按“值”复制的。
Cython会自动计算并修复少量类型。据我所知,数字中变量显然只能容纳数字。由于数字是不可变的,并且是通过“值” Python处理的,因此这不应影响行为。