Groups | Search | Server Info | Login | Register


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

Re: for unpacking

From "Peter J. Holzer" <hjp-usenet4@hjp.at>
Newsgroups de.comp.lang.python
Subject Re: for unpacking
Date 2024-08-11 12:26 +0200
Organization LUGA
Message-ID <slrnvbh4e5.94sh.hjp-usenet4@trintignant.hjp.at> (permalink)
References <lhfh20Faok1U1@mid.individual.net> <slrnvb57ba.1h524.hjp-usenet4@trintignant.hjp.at> <lhnbsqFgnfoU1@mid.individual.net> <slrnvbeh7s.3orv.hjp-usenet4@trintignant.hjp.at> <lhpvnhFsm4eU1@mid.individual.net>

Show all headers | View raw


On 2024-08-10 20:09, Patrick Rudin <taxi_bs@gmx.ch> wrote:
> Der Begriff "Alias" verwirrt mich auch ein wenig. Wenn ich Aliasnamen 
> benutze und mich als Klaus-Bärbel oder auch mal als Matrosentom ausgebe 
> und mir jemand eine blutige Nase verpasst, dann zeigen beide Alias-Namen 
> auf dieselbe Person, die eine blutige Nase hat. Passt nicht so ganz zum 
> Informatik-Konzept.

Aliasing in Programmiersprachen bedeutet einfach, dass zwei Namen (oder
allgemeiner zwei Ausdrücke) das gleiche Ding bezeichnen, was auch immer
dieses Ding sein mag.

Dein Beispiel, in dem Du verschiedene Namen trägst, entspricht genau dem
Konzept von Python:

patrick_rudin = Person()
klaus_bärbel = patrick_rudin
matrosen_tom = patrick_rudin

# Hier haben wir jetzt eine Person mit drei Namen, nicht drei Klones.

matrosen_tom.kriegt_eine_auf_die_nase()

assert patrick_rudin.nase.blutet ()

;-)

Das ist auch insofern gleich, als im richtigen Leben ein Name nicht das
gleiche wie eine Person ist eine Person mehrere Namen haben kann, und
ein Name nicht einen anderen Namen bezeichnen kann, sondern nur eine
Person.

Es gibt natürlich auch Unterschiede, z.B. kann in Python ein Name immer
nur auf genau ein Objekt zeigen, während wir es im richtigen Leben
gewohnt sind, dass Namen nicht eindeutig sind und mehrere Personen
bezeichnen können.

Aber dieses Aliasing war offensichtlich nicht das, was Du gemeint hast.


Du meintest, dass das Ding, das da gealiast wird, der Ausdruck selbst
ist. Nach

    b = t[1]

sollte

    b = 10

exakt die gleichen Auswirkungen haben wie 

    t[1] = 10

Das passiert z.B. in Perl implizit in einer Schleife:

------------------------------------------------------------------------
#!/usr/bin/perl
use v5.30;
use warnings;

my @a = (1, 2, 3);

for my $x (@a) {
    $x = 10;
}
say for @a;
------------------------------------------------------------------------

gibt
10
10
10
aus.

In C++ kann man das explizit mit Referenzen machen:

------------------------------------------------------------------------
#include <iostream>             // 1

int main() {                    // 3
    int a = 3;                  // 4
    int &b = a;                 // 5
    b = 5;                      // 6
    std::cout << a << "\n";     // 7
    return 0;                   // 8
}                               // 9
------------------------------------------------------------------------

Aber C++ unterscheidet sich von Python dadurch, dass Variablen ihre
Werte tatsächlich enthalten (und nicht nur auf sie verweisen). Im
Beispiel oben gibt es 4 Bytes am Stack, die der Compiler als "a"
bezeichnet und die zunächst mit dem Wert 0x00000003 überschrieben werden
(Zeile 4) und später mit dem Wert 0x00000005 (Zeile 6). b wiederum sind
8 Bytes, die mit der Adresse des ersten Bytes von a initialisiert werden
(Zeile 5) und weil der Compiler weiß, dass es eine Referenz ist, wird
bei der Zuweisung in Zeile 6 nicht b selbst (also die Adresse) geändert,
sondern das, worauf b zeigt.

In C müsste man das explizit machen:

------------------------------------------------------------------------
    ...
    int *b = &a;
    *b = 5;
    ...
------------------------------------------------------------------------

Hier ist b also kein Alias von a, sondern der Ausdruck *b (& bestimmt
die Adresse eines Objekts, * dereferenziert einen Pointer).

Die meisten Programmiersprachen, die ich kenne, folgen diesem "Eine
Variable ist ein Speicherbereich, der einen Wert enthält" Modell,
zumindest für einfache Typen. In Java sind Variablen vom Objekt-Typ
immer Referenzen. Wenn man von Java kommt, ist das Python-Modell daher
recht logisch: Da es in Python nur Objekt-Typen gibt (im Gegensatz zu
Java) verhalten sich alle Typen so wie die Objekt-Typen in Java.

        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