Wie dynamisch reservieren Speicher in Python

Gibt es eine Methode in python, das ich verwenden kann, um ein sperren von Speicher aus dem heap ,und verwenden Sie eine variable zu referenzieren. Genau wie das Schlüsselwort "new" , oder die Funktion malloc() in anderen Sprachen:

Object *obj = (Object *) malloc(sizeof(Object)); 
Object *obj = new Object();

In das Projekt, mein Programm ist warten, um zu erhalten, einige Daten in ungewissen Abständen und mit einer bestimmten Länge in bytes, wenn richtig.

Früher habe ich es wie folgt:

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);
 }

}

Nun, ich migrieren möchten diese alte Projekt zu python, und ich habe versucht, es zu tun mögen dieses:

def reveive():
 data=dataRecv()
 globalList.append(data)

Allerdings bekomme ich die alle Artikel in der Liste sind gleich, und gleich die neueste Einzelteil. Es ist offensichtlich, dass alle die Elemente der Liste sind auf den gleichen Speicher-Adresse, und ich will mir neuen Speicher-Adresse jeweils die Funktion aufgerufen wird.

  • Was ist globalList in python? Eine lokale variable?
  • Sie versuchen nicht, das problem zu lösen in der richtigen Weise. Python ist eine übergeordnete Sprache, die Sie don ' T allocate memory. Wenn Sie zeigen dataRecv definition (oder was auch immer das dann nennt - ein minimale reproduzierbare Beispiel, bitte) es könnte klarer sein, was das eigentliche problem ist. Meine Vermutung ist, du bist entleeren und wiederverwenden einer einzelnen Liste-Objekt, anstatt ein neues zu erstellen. Eventuell haben Sie die gefürchtete änderbaren Standard-argument.
  • danke,dataRecv ist aus einem anderen import-Modul,und ich übergehe das argument, das verwendet werden, um rufen dataRecv.Ich Druckdaten in reveive() ,dann ist es richtig.Wie Sie sagen,ich bin nicht eine neue Liste zu erstellen-Objekt.das ist genau das, was ich Fragen ,ich brauche eine Methode, um zu erreichen das Schlüsselwort "new" in c++
InformationsquelleAutor lb lb | 2016-06-24
Schreibe einen Kommentar