2008-10-03 10 views
7

Ich finde es ärgerlich, dass ich eine Liste nicht löschen kann. In diesem Beispiel:Löschen einer Liste

a = [] 
a.append(1) 
a.append(2) 

a = [] 

Das zweite Mal, dass ich eine auf eine leere Liste initialisieren, erstellt es eine neue Instanz einer Liste, die an einem anderen Ort im Speicher vorhanden ist, so kann ich es nicht referenzieren dem Erstens, um nicht zu sagen, es ist ineffizient.

Die einzige Art, wie ich die Beibehaltung der gleichen Zeiger sehen kann, ist, etwas zu tun wie folgt aus:

for i in range(len(a)): 
    a.pop() 

Das scheint ziemlich obwohl langatmig, gibt es einen besseren Weg, dies zu lösen?

+0

Bitte erweitern Sie auf "das ist an einem anderen Ort im Speicher, so dass ich es nicht verwenden kann, um die erste Referenz" Dies macht sehr wenig Sinn in einem Python-Kontext. Vielleicht in C++, aber nicht in Python. –

+0

Ich habe nur darauf hingewiesen, dass, wenn ich einen Verweis auf dieses Objekt innerhalb eines anderen Objekts habe, das 'neue' a jetzt ein anderes ist als das erste, so kann ich nicht denselben Verweis verwenden, um das neue a zu modifizieren. Python hat immer noch das Konzept von Zeigern und Speicherverwaltung, es versteckt es nur vor dir. – Dan

+0

"das 'neue' a ist jetzt ein anderes als das erste" Obwohl absolut wahr, kann ich keine Situation sehen, in der das wichtig ist. Ein vollständigeres Codebeispiel könnte helfen zu erklären, wo dies tatsächlich von Bedeutung wäre. –

Antwort

26

Sie suchen:

del L[:] 
+2

In ähnlicher Weise können Sie auch L [:] = [] – Moe

3

ich bin nicht sicher, warum Sie über die Tatsache besorgt sind, dass Sie eine neue, leere Liste im Speicher statt der gleichen „Zeiger“ sind verweisen.

Ihre andere Liste wird früher oder später gesammelt werden und einer der großen Vorteile bei der Arbeit in einer hochrangigen, Müll-gesammelten Sprache ist, dass Sie sich normalerweise nicht um solche Dinge sorgen müssen.

+1

Er kann einen Verweis auf die Liste in einem anderen Teil des Programms halten, die wissen müsste, dass die Liste leer ist. –

+0

Vielleicht, aber das hat er nicht gefragt. Er sorgte sich stattdessen darum, einen Zeiger auf diesen bestimmten Ort in der Erinnerung zu verlieren, was in Python ohnehin ein zweifelhaftes Konzept ist. – Dana

+0

Er erklärte es später in einem Kommentar. – tzot