Python – Verwenden des Multiply-Operators zum Erstellen von Kopien von Objekten in Listen [doppelte]

Diese Frage hat hier schon eine Antwort:

  • Liste der Listen Änderungen reflektiert in Sublisten unerwartet 13 Antworten

In Python, wenn ich die Liste der Objekte durch eine Ganzzahl multipliziere, bekomme ich eine Liste von Verweisen auf dieses Objekt, zB:

  • Django: Verfolgen Sie die Beziehungen rückwärts
  • Python, Wie man eine Video-Datei (Mpeg / avi etc) in eine exe?
  • Plotten von Ergebnissen der hierarchischen Clustering-Ontop einer Matrix von Daten in Python
  • Verwenden von pyodbc Ursache Fehler: Datenquellenname nicht gefunden und kein Standardtreiber angegeben
  • Np.wo mehrere logische Aussagen Pandas
  • Implieren für python
  • >>> a = [[]] * 3 >>> a [[], [], []] >>> a[0].append(1) >>> a [[1], [1], [1]] 

    Wenn mein gewünschtes Verhalten darin besteht, eine Liste von Kopien des ursprünglichen Objekts zu erstellen (zB Kopien, die durch die "copy.copy ()" – Methode oder irgendeine Art von Standard erstellt wurden, gibt es eine elegante Möglichkeit, dies mit demselben Multiplikationsoperator zu tun? Soll ich nur mit einem Listenverständnis oder so etwas halten?

     [[] for x in range(0,3)] 

    Jede Version von Python ist in Ordnung.

    3 Solutions collect form web for “Python – Verwenden des Multiply-Operators zum Erstellen von Kopien von Objekten in Listen [doppelte]”

    Der Multiplikationsoperator auf einer Sequenz bedeutet Wiederholung des Items (s) – NICHT Erstellung von Kopien (flache oder tiefe) der Items. Nichts hält dich davon ab, verrückt zu werden, a la:

     import copy class Crazy(object): def __init__(self, body, weird=copy.copy): self.gomez = body self.cousinitt = weird def __mul__(self, n): return [self.cousinitt(x) for x in (self.gomez * n)] a = Crazy([[]]) * 3 

    … außer deiner Vernunft und gesunden Menschenverstand, wenn überhaupt. Wenn du auf denjenigen klickst, wie kannst du den Operator träumen, könnte man etwas ganz anderes bedeuten, als es beabsichtigt ist, zu bedeuten, außer wenn __mul__ andere Klasse definierst, die __mul__ auf komische Weise überlastet …? -)

    Dies ist ein guter Gebrauch des Listenverständnisses – es ist auch der lesbarste Weg, um es IMO zu machen.

    Das Listenverständnis ist der beste Weg, dies zu tun. Wenn Sie eine neue Klasse definieren und den Operator * überladen, wird es die nächste Person ernsthaft verwechseln, um den Code zu lesen.

    Python ist die beste Programmiersprache der Welt.