Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.python > #6139

Re: for unpacking

From "Peter J. Holzer" <hjp-usenet4@hjp.at>
Newsgroups de.comp.lang.python
Subject Re: for unpacking
Date 2024-08-07 00:02 +0200
Organization LUGA
Message-ID <slrnvb57ba.1h524.hjp-usenet4@trintignant.hjp.at> (permalink)
References <lhfh20Faok1U1@mid.individual.net>

Show all headers | View raw


On 2024-08-06 20:57, Patrick Rudin <taxi_bs@gmx.ch> wrote:
> nummern = [[5,5,5]]
> nummern.append([9,9,9])
>
> for a,b,c in nummern:
>      b += c
>
> nummern
> Out[8]: [[5, 5, 5], [9, 9, 9]]
>
> Ich kapier das nicht. Funktioniert unpacking nur lesend?

Nein, aber int ist ein Immutable-Typ. Du kannst den Wert eines
int-Objekts nicht ändern.

> for a,b,c in nummern:
>      b += c

Beim ersten Schleifendurchlaut zeigt b tatsächlich auf das selbe
int-Objekt wie nummern[0][1] und c auf das selbe int-Objekt wie
nummern[0][2]. (Tatsächlich zeigen sie sogar auf das selbe Objekt).

b += c

macht zwei Dinge:

1) Es ruft b.__iadd__(c) auf. Wenn b mutable wäre, würde das den Wert
des Objekts, auf das b zeigt ändern und das Objekt zurückliefern. Da das
Objekt aber immutable ist, kann sein Wert nicht geändert werden. Es wird
also ein neues Objekt (vom Typ int mit dem Wert 10) erzeugt und
zurückgeliefert.

2) Der Returnwert wird an b zugewiesen. b zeigt also jetzt auf das neue
Objekt.

nummern[0][1] zeigt aber immer noch auf das alte, denn dem hast Du ja
kein neues zugewiesen.



> Oder wie kann ich einen Wert während der For-Schlaufe ändern, ohne die
> umständliche Notation zu verwenden?

Es gibt mehrere Möglichkeiten.

Wenn Du nummern in-place ändern willst, musst Du wohl die Indizes
verwenden.

Aber Du könntest auch eine List-Comprehension nehmen:

nummern = [[a, b+c, c] for a, b, c in nummern]

Das erzeugt aber eine völlig neue Liste und weist diese nummern zu. Wenn
Du andere Variablen hast, die noch auch die alte Liste zeigen, dann tun
sie das auch weiterhin.

Es gibt einen sehr guten Vortrag zu dem Thema:
Ned Batchelder - Facts and Myths about Python names and values - PyCon 2015
https://www.youtube.com/watch?v=_AEJHKGk9ns

        hp

Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-06 22:57 +0200
  Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-06 23:45 +0200
    Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-07 13:24 +0200
  Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-07 00:02 +0200
    Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-07 11:54 +0200
      Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-07 13:21 +0200
        Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-07 22:58 +0200
    Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-09 22:18 +0200
      Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-10 12:07 +0200
        Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-10 13:49 +0200
      Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-10 12:46 +0200
        Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-10 22:09 +0200
          Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-11 12:26 +0200
            Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-11 15:05 +0200
              Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-11 17:44 +0200
            Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-11 17:26 +0200
              Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-11 18:16 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-11 23:18 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-11 23:43 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-12 21:03 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-13 02:44 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-13 19:36 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-13 19:47 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-14 04:38 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-14 08:26 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-14 10:25 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-14 13:22 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-14 14:45 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-12 21:06 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-13 00:24 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-14 14:41 +0200
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-14 18:39 +0200
                Re: for unpacking Ralph Aichinger <ralph@pi.h5.or.at> - 2024-08-14 17:05 +0000
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-15 05:44 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-16 13:31 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-13 23:06 +0200
                Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-13 23:19 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-14 21:11 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-14 21:08 +0200
        Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2025-10-06 22:46 +0200
          Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2025-10-06 23:37 +0200
            Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2025-10-07 09:01 +0200
              Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2025-10-07 14:22 +0200
                Re: for unpacking ram@zedat.fu-berlin.de (Stefan Ram) - 2025-10-07 13:13 +0000
                Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2025-10-07 15:34 +0200
                Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2025-10-07 22:57 +0200
            Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2025-10-10 21:50 +0200
  [Python-de] Re: for unpacking Mike Müller <mmueller@python-academy.de> - 2024-08-07 09:14 +0200
    Re: [Python-de] Re: for unpacking Patrick Rudin <taxi_bs@gmx.ch> - 2024-08-07 11:57 +0200
      Re: [Python-de] Re: for unpacking "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-08-08 23:18 +0200
      [Python-de] Re: for unpacking Mike Müller <mmueller@python-academy.de> - 2024-08-09 08:03 +0200
  Re: for unpacking Hermann Riemann <nospam.ng@hermann-riemann.de> - 2024-08-07 12:35 +0200

csiph-web