Pythonにはヒープからメモリのブロックを取得し、それを参照する変数を使用する方法はありますか?ただ、「新しい」キーワード、または他の言語の機能malloc()
のように:プロジェクトでPythonでメモリを動的に割り当てる方法
Object *obj = (Object *) malloc(sizeof(Object));
Object *obj = new Object();
、私のプログラムは、不確実な間隔で、正しいバイトの一定の長さのいくつかのデータを受信するために待機しています。
私はこのようにそれを使用:
void receive()// callback
{
if(getSize()<=sizeof(DataStruct))
{
DataStruct *pData=malloc(sizeof(DataStruct));
if(recvData(pData)>0)
list_add(globalList,pData);
}
}
void worker()
{
init()
while(!isFinish)
{
dataProcess(globalList);
}
}
は今、私のpythonにこれらの古いプロジェクトを移行したい、と私はこのようにそれを実行しようとしました。しかし
def reveive():
data=dataRecv()
globalList.append(data)
、私が取得リスト内のすべてのアイテムは同じで、最新の受信アイテムと同じです。すべてのリストアイテムが同じメモリアドレスを指していることは明らかであり、関数が呼び出されるたびに新しいメモリアドレスを取得したい。
pythonでglobalListとは何ですか?ローカル変数? – Boiethios
問題を正しい方法で解決しようとしていません。 Pythonはより高いレベルの言語であり、メモリをまったく割り当てません。あなたが 'dataRecv'定義を表示したら(実際には - mcveを呼び出してください)、実際の問題*が何であるかがはっきりしているかもしれません。私の推測では、新しいリストを作成するのではなく、単一のリストオブジェクトを空にして再利用しています。おそらくあなたは恐ろしい[変更可能なデフォルト引数]を持っているでしょう(http://stackoverflow.com/q/1132941/3001761)。 – jonrsharpe
ありがとう、dataRecvは別のインポートモジュールからのもので、dataRecv.Iを呼び出すために使用した引数を省略しています。reveive()でデータを出力しました。そうです。あなたが言うように、私は新しいリストオブジェクトを作成していません。私は尋ねる、私はC + +でキーワード "新しい"を達成するためのメソッドが必要 –