*
ist nur eine Multiplikation - wie +
für Listen ist eine intuitive Sache, beide Operanden concatenate bedeutet, ist der nächste Schritt Multiplikation mit einem Skalar - mit [0] * N
„verketten diese Liste mit selbst N-mal“, was bedeutet!
Mit anderen Worten: *
ist ein Operator, der in Python für seine primitiven Sequenztypen und eine Ganzzahl definiert ist, um die Sequenz mit sich selbst so oft zu verketten. Es funktioniert mit Listen, Tupeln und sogar Strings. In Python ist das etwas natürlich, weil die Sprache Operatoren überlädt - also erwarten Python-Programmierer, dass Operatoren sinnvolle Dinge mit Objekten tun.
Man sollte vorsichtig sein, dass die Objekte, die die resultierende Liste bilden, keine Kopien der Objekte in der ursprünglichen Liste sind - sondern Verweise auf dasselbe Objekt. Wenn der Inhalt der ursprünglichen Liste also nur Zahlen oder ein anderes unveränderliches Objekt ist, gibt es keine Überraschungen - aber wenn er veränderbare Objekte enthält, wie z. B. innere Listen, könnte es bei der Änderung zu schweren Nebenwirkungen kommen - wie hier Schnipsel:
In [167]: a = [[0]] * 7
In [168]: a
Out[168]: [[0], [0], [0], [0], [0], [0], [0]]
In [169]: a[0].append(1)
In [170]: a
Out[170]: [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
[Liste wiederholen] (https://github.com/python/cpython/blob/master/Objects/listobject.c#L506) – YOU
funktioniert auch mit Strings – inf