2013-05-24 59 views

Antwort

7
[[]] * 2 

macht ein shallow copy. Entspricht:

x = [] 
t0 = [x, x] 

jedoch

t1 = [[], []] 

Verwendet zwei separate leere Liste Literale, sie sind so ganz andere offensichtlich mutiert nicht die andere

+0

Wenn ich eine Liste mit n leeren Liste deklarieren möchte, wie könnte ich tun? –

+0

@ user1807991 'items = [[] für i im Bereich (N)] 'beachten Sie, wie dies nur das leere Listenliteral in einem Listenverständnis verwendet, um sicherzustellen, dass sie getrennt sind – jamylak

10

Wenn Sie [[]] * 2 tun, gibt es eine Liste mit zwei von die gleiche Liste, anstatt zwei Listen. Es ist wie zu tun:

a = [] 
b = [a, a] 

Der üblicher Weg, um eine Liste mit mehreren verschiedenen leeren Listen (oder andere veränderbare Objekten) zu machen ist, dies zu tun:

t1 = [[] for _ in range(5)] 
+0

Noch besser ist mutieren könnte sein, wandelbar, darauf hinzuweisen, vs unveränderliche Objekte. Wie zeigt man hier den Unterschied im Verhalten mit Tupeln und Listen? – Arafangion

Verwandte Themen