Sind Python-Listen veränderlich?

Wenn ich folgenden Code eingeben,

x=[1,2,4] print(x) print("x",id(x)) x=[2,5,3] print(x) print("x",id(x)) 

Es gibt die Ausgabe als

 [1, 2, 4] x 47606160 [2, 5, 3] x 47578768 

Wenn Listen veränderbar sind, warum dann gibt es 2 Speicheradresse beim Ändern der Liste x?

  • Sind benutzerdefinierte Klassen veränderlich
  • Problem beim Erstellen der N * N * N Liste in Python
  • Das unveränderliche Objekt in Python
  • Warum ist MutableString in Python veraltet?
  • Ein veränderlicher Typ in einem unveränderlichen Behälter
  • Python-Bit-Operationen auf einer Liste von Int's
  • Sind offen (Datei, "wt" oder "rt") verschiedene Objekte?
  • Unveränderlich vs Mutable Typen
  • 3 Solutions collect form web for “Sind Python-Listen veränderlich?”

    Sie haben ein neues Listenobjekt erstellt und an denselben Namen gebunden, x . Sie haben das vorhandene Listenobjekt niemals am Anfang an x gebunden.

    Namen in Python sind nur Referenzen. Zuordnung ist ein Name an einen Objekt gebunden. Wenn du x wieder zugewiesen hast, zeigst du diesen Hinweis auf ein anderes Objekt. In deinem Code hast du einfach ein ganz neues Listenobjekt erstellt und dann auf dieses neue Objekt zurückgesetzt.

    Wenn Sie eine Liste mutieren möchten, rufen Sie Methoden zu diesem Objekt auf:

     x.append(2) x.extend([2, 3, 5]) 

    Oder auf Indizes oder Scheiben der Liste zuordnen:

     x[2] = 42 x[:3] = [5, 6, 7] 

    Demo:

     >>> x = [1, 2, 3] >>> id(x) 4301563088 >>> x [1, 2, 3] >>> x[:2] = [42, 81] >>> x [42, 81, 3] >>> id(x) 4301563088 

    Wir haben das Listenobjekt geändert (mutiert es), aber die id() dieses Listenobjekts hat sich nicht geändert. Es ist immer noch das gleiche Listenobjekt.

    Vielleicht kann diese hervorragende Präsentation von Ned Batchelder auf Python Namen und Bindung helfen: Fakten und Mythen über Python Namen und Werte .

    Sie haben das Listenobjekt, das von x mit dieser Zeile referenziert wurde, nicht mutiert (ändern)

     x=[2,5,3] 

    Stattdessen erstellt diese Zeile ein neues Listenobjekt und ordnet dann die Variable x zu. Also, x verweist nun auf das neue Objekt und id(x) gibt eine andere Zahl als zuvor:

     >>> x=[1,2,4] # x references the list object [1,2,4] >>> x [1, 2, 4] >>> x=[2,5,3] # x now references an entirely new list object [2,5,3] >>> x [2, 5, 3] >>> 

    Sie mutieren nicht die Liste, Sie erstellen eine neue Liste und weisen sie dem Namen x . Das ist, warum id gibt Ihnen verschiedene Ausgänge. Ihre erste Liste ist weg und wird Müll gesammelt (es sei denn, es gibt einen anderen Hinweis darauf irgendwo).

    Python ist die beste Programmiersprache der Welt.