У меня есть этот код ради примера:переменная экземпляра в Cython
cimport cython
from libc.stdlib cimport malloc
cdef int i
cdef int ii
cdef int j = 0
cdef int parnum = 6
cdef int sysnum = 2
cdef Particle *parlist = <Particle *>malloc(parnum * cython.sizeof(Particle))
cdef System *psys = <System *>malloc(sysnum * cython.sizeof(System))
for i in range(sysnum):
psys[i].particles = <Particle *>malloc((parnum/sysnum) * cython.sizeof(Particle))
for ii in range(parnum/sysnum):
psys[i].particles[ii].x = j
parlist[j] = psys[i].particles[ii]
j += 1
print("--- before changes ---")
for i in range(sysnum):
for ii in range(parnum/sysnum):
print(psys[i].particles[ii].x)
print("--- before changes ---")
for i in range(parnum):
parlist[i].x = 0
print("--- after changes ---")
for i in range(sysnum):
for ii in range(parnum/sysnum):
print(psys[i].particles[ii].x)
print("--- after changes ---")
cdef struct System:
Particle *particles
cdef struct Particle:
int x
Когда программа запускается она печатает тот же результат до и после изменения parlist элементов. Так что я не знаю, почему, когда я изменяю значение parlist, значение psys.particles не изменяется вообще. Это как если бы парлист был копией, а не экземпляром. Как сделать его экземпляром, указывая на то же самое?
Большое спасибо