Python ctypesで配列のサイズを変更するという1つの答えが見つかりました
from ctypes import *
list = (c_int*1)()
def customresize(array, new_size):
resize(array, sizeof(array._type_)*new_size)
return (array._type_*new_size).from_address(addressof(array))
list[0] = 123
list = customresize(list, 5)
>>> list[0]
123
>>> list[4]
0
もう一度呼び出すと:
list = customresize(list, 40)
エラーが発生します:
ValueError: Memory cannot be resized because this object doesn't own it
初めて電話したときだけ機能するのはなぜcustomresize()
ですか?また、ある人が別の回答を投稿しているのを見ました:
def customresize(array, new_size):
return (array._type_*new_size).from_address(addressof(array))
herecustomresize()
は、何度呼び出しても機能します。
list
しかし、別の質問が発生します。サイズを大きくしても、python.exeがより多くのメモリを使用しないことがわかりました。つまり、サイズ変更されたlist
. 割り当てなしでメモリにアクセスできるようにすることは非常に危険ですか? なぜctypes.resize
このように設計されているのですか?本当に迷う……。