[python-users] Geschachtelte Listen

Dirk Hünniger dirk.hunniger at googlemail.com
Mo Jun 24 10:21:55 CEST 2019


Hallo Mark,

vielen Dank für deine Anwort. Die Sache mit den 8 Byte pro Pointer hatte 
ich schon so befürchtet. Als Lösung würde mir dann noch einfallen den 
Speicher sehr manuell zu verwalten und bei jedem Rose Element die Länge 
der Subliste mit anzugeben. Man braucht ein Bit um zwischen Rose und 
Leaf zu unterscheiden. Sowie 8 Byte für die Nutzdaten je Leaf und 8 Byte 
für die Länge je Rose. Wenn ich den bei mir auftrenden Spezialfall das 
die Nutzdaten Unicode Zeichen sind, sowie die Tatsache das immer weniger 
1 ExaByte Ram vorhanden sind nutze, komme ich mit 8 Byte pro Rose bzw 
Leaf aus. Wäre dann halt nur ein sehr schlecht wartbarer prozduraler 
Ansatz. Daher werde ich wohl einfach weniger Daten in der Speicher laden 
müssen.

Viele Grüße Dirk

On 6/24/19 9:46 AM, Dr. Mark Asbach wrote:
> Hallo Dirk,
>
> Dein Problem ist, dass die Listen Elemente haben, die entweder ein Integer oder aber eine Klasseninstanz einer Subliste darstellen. Damit sind in der Liste zwangsläufig Objekte vorhanden, d.h. jeder Listeneintrag selbst ist ein Pointer. Eine einfach verkettete Liste braucht jeweils zusätzlich einen Pointer zur Herstellung der Verkettung. Darüber hinaus muss jeder Eintrag unterschieden werden können zwischen Subliste und Eintrag. Das passiert über einen weiteren Pointer (in C++ auf die Virtual Method Table der jeweiligen Klasse). Damit kannst Du als Abschätzung der Größenordnung 3 Pointer pro Element annehmen. Auf einem 64-Bit-System also 3*8 = 24 Bytes. Unter 40 Mio * 24 = 0.96 Gb kannst Du also auf einem 64-Bit-System niemals landen, selbst wenn der restliche Speicher-Overhead der Listen und Klassen 0 ist. Andere Programmiersprachen haben das ähnlich.
>
> Grüße,
> Mark
>


Mehr Informationen über die Mailingliste python-users