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:

  • Selen ajax dynamische Paginierungsbasis Spinne
  • Python Pandas DataFrame entfernen leere Zellen
  • Suche die größte Anzahl von einer Spalte in einer Liste der Liste python
  • Schnellste Weg, um String-Feature-Vektoren Python zu bauen
  • In TensorFlow, was ist die Bedeutung von ": 0" im Namen eines Variablen?
  • Tkinter Code für GUI 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.