Bar
与0..6 Foo
s相关联。 Foo
是扩展类型,就像这样
cdef class Foo:
cdef double fooiness
cdef void do_things(self):
self.fooiness += 1
我非常非常非常非常频繁地复制Bar
的副本。理想情况下,我甚至希望能够在没有GIL的情况下与线程同时复制Bar
的副本。我可以这样定义Bar
:
cdef class Bar:
cdef list my_foos
cdef Bar copy(self):
cdef Bar the_copy = Bar.__new__(Bar)
the_copy.my_foos[:] = self.my_foos[:]
return the_copy
但是您可以想象,list[:] = list[:]
报告中的-a
位显示为亮黄色。
我尝试过cdef Foo my_foos[6]
,但这给了我Array element cannot be a Python object
所以我尝试了cdef Foo * my_foos[6]
,但这给了我Pointer base type cannot be a Python object
我已经考虑完全放弃该数组并使用cdef Foo my_foo_1, my_foo_2...
,但我想遍历我的Foo
,而不必手动展开循环。
搜索“我如何在Cython中创建扩展类型数组”的变体没有任何意义-这似乎很奇怪,因为拥有不是原始类型的东西的数组是很多人会想到的事情想做。我可能缺少明显的东西。
我如何进行这项工作?