unendlich große listen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Krux
User
Beiträge: 8
Registriert: Dienstag 26. Dezember 2006, 01:02

Montag 1. Januar 2007, 03:29

Wenn ich eine Liste in sich selbst speichere, dann wird sie als referenz auf sich selbst gespeichert, anstatt den aktuellen Stand der Liste hineinzuspeichern, wie das bei Tupeln der Fall ist. Da hab ich mal so ne frage: Ist es möglich, das einem das auch was nützt, z-b. dass sich da dann andere veränderte werte der Liste befinden, als sie im original waren? also z.B. eine Liste die alle Fibonachizahlen enthält oder so?
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Montag 1. Januar 2007, 05:39

listen kopieren geht so:

Code: Alles auswählen

kopierteliste = neliste[:]
ansonsten stell deine frage bitte nochmal, aber klarer.
...meh...
BlackJack

Montag 1. Januar 2007, 11:33

Krux hat geschrieben:Wenn ich eine Liste in sich selbst speichere, dann wird sie als referenz auf sich selbst gespeichert, anstatt den aktuellen Stand der Liste hineinzuspeichern, wie das bei Tupeln der Fall ist.
Das klingt nach einem Missverständnis. Auch in Tupeln werden nur Referenzen gespeichert. Du kannst in einem Tupel aber keine Referenz auf das Tupel selbst speichern, weil alles was Du in ein Tupel packst, schon existieren muss bevor das Tupel an den Namen gebunden wird. Wenn das Tupel "fertig" ist, hast Du zwar einen Namen, kannst den aber nicht benutzen um das Tupel "in sich selbst" zu stecken, weil Tupel "immutable", d.h. nicht veränderbar sind.
Da hab ich mal so ne frage: Ist es möglich, das einem das auch was nützt, z-b. dass sich da dann andere veränderte werte der Liste befinden, als sie im original waren? also z.B. eine Liste die alle Fibonachizahlen enthält oder so?
Wie sollte das passieren!? Nach folgendem Code...

Code: Alles auswählen

In [6]: a = [1, 2, 3]

In [7]: a[2] = a

In [8]: a
Out[8]: [1, 2, <Recursion on list with id=-1214990132>]
...sieht's im Speicher so aus:

Code: Alles auswählen

   Namen  |  Objekte             +-----+-+
                         +------>|<int>|1|
          |              |       +-----+-+
                         |       +-----+-+
          |              | +---->|<int>|2|
                         | |     +-----+-+
    +-+   |      +------+|+|+-+
    |a|--------->|<list>|o|o|o|
    +-+   |  +-->+------+-+-+|+
             |               |
          |  +---------------+

          |
Es gibt sicher auch Fälle wo so eine Referenz auf sich selbst nützlich sein kann.
Krux
User
Beiträge: 8
Registriert: Dienstag 26. Dezember 2006, 01:02

Montag 1. Januar 2007, 14:07

ja genau so, nur was bringt einem das, wenn das Element als letztes in der liste genau das selbe ist, wie die liste selbst? Ich suche nach einem Praktischen anwendungsbeispiel dafür. In der Uni hatten wir listen (in einen anderen Programmiersprache tScheme), die enthielten z.B. alle Fibonacizahlen, und waren somit unendlich lang. Die hat man rekursiv aufgebaut, nur wurde die rekursion erst bein aufrufen der listenelemente durchgeführt, und nicht beim erstellewn der liste. Da ist mir die Idee gekommen, das es sowas vieleicht auch geben könnte in Python, denn so bringt einem das ganze recht wenig.
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Montag 1. Januar 2007, 15:47

Im Grunde entspricht das Generatoren: http://docs.python.org/tut/node11.html# ... 0000000000
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
BlackJack

Montag 1. Januar 2007, 17:07

Krux hat geschrieben:ja genau so, nur was bringt einem das, wenn das Element als letztes in der liste genau das selbe ist, wie die liste selbst? Ich suche nach einem Praktischen anwendungsbeispiel dafür.
Mit verschachtelten Listen lassen sich Bäume modellieren. Wenn man Referenzen auf die Listen selbst in die Listen steckt, kann man beliebige Graphen modellieren.
Antworten