Я написал функцию C с именем SortInPlace
, которая сортирует целочисленный массив на месте. Теперь я хочу позвонить из Питона. Ниже приводится ядро моего кода:
def sort_in_place(vs):
buffer = (c_void_p * len(vs))(*vs)
lib.SortInPlace.argtypes = [c_void_p]
lib.SortInPlace.restype = None
lib.SortInPlace(buffer)
print "buffer: ", buffer
vs = [3,2,1]
sort_in_place(vs)
print "vs: ", vs
Однако, результат оказывается
buffer: 1,2,3
vs: 3,2,1
Я напечатал адрес из buffer
и vs
, которые показывают, что они имеют разные адреса памяти . Таким образом, buffer
сортируется на месте, но vs
остается нетронутым.
Я также пытался использовать array
для преобразования vs
в указатель по:
from array import array
a = array('l',vs)
# however, their addresses are also different
print hex(id(vs))
print hex(a.buffer_info()[0])
В обоих случаях оригинал vs
всегда копируется в новый буфер памяти. У меня вопрос: как я могу напрямую создать буфер из адреса объекта списка Python без копирования?