takeItem() und del - Was passiert hier?

Hallo zusammen,

ich darf gerade eine Anwendung die in Python geschrieben wurde nach Java portieren. Ich habe keinerlei Kenntnisse von Python.

Folgendes Stück scheint mir etwas paradox zu sein:

# die releaseListView ist eine QListView
item = self.releaseListView.firstChild()
while item.firstChild():
    childItem = item.takeItem(item.firstChild())
    del childItem

Ich verstehe den Code so:
solange das item ein Kind-Element hat, nehme dieses aus der Liste und lösche es.

Laut: python - How can I remove a QListWidgetItem from a QListWidget and refresh the display? - Stack Overflow macht takeItem() das gleiche wie pop() und pop löscht anhand des Index ein Element aus der Liste.

und del löscht ein Variable, bzw. gibt deren Speicher wieder frei vgl. When is del useful in python? - Stack Overflow

Ist das dann nicht doppelt oder übersehe ich hier etwas?

PS: falls einer einen Link zur API von Python 2.5 hat, immer her damit :slight_smile:

del bedeutet in dem Fall nur, dass du die Variable aus dem Scope entfernst. Der dazugehörige Speicher selbst wird durch Referenzzählung freigegeben. Mit takeItem bekommst du eine Variable zurück, du musst sie aber nicht nützen. Daher würde folgendes reichen:
[PYTHON]while item.firstchild():
item.takeItem(item.firstChild())
[/PYTHON]

danke dir, dann hab ich das also doch nicht ganz falsch verstanden :slight_smile:

Hab das jetzt so nach Java “übersetzt”

    item.getChildren().clear();
}```