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

  • Get object von id ()?
  • Wie benutzt man eine Regex in einem Listenverständnis in Python?
  • Ein besserer Weg als eval () beim Übersetzen von Keyword-Argumenten in QuerySets (Python / Django)
  • Stale Inhaltstypen während syncdb in Django
  • Warum ist die Eigenschaft Dekorator nur für Klassen definiert?
  • Konvertieren Sie HTML in CSV
  •  [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?

    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.