Lista jednokierunkowa

0

Witam, mam problem ze zrozumieniem zasady funkcjonowania list powiązanych w pythonie. Nie do końca rozumiem gdzie zlokalizowane są poszczególne nody takiej listy. Nie są przyporządkowane im żadne zmienne, tylko referencje w innych nodach a zmienną jest dopiero cała lista.

Jeśli stworzymy klasę Node:

class Node:

    def __init__(self, data, next_node = None):

        self.data = data
        self.next_node = next_node

i stworzymy ręcznie małą listę powiązaną:

head = None

head = Node(1, head)
head = Node(2, head)
head = Node(3, head)
head = Node(4, head)

to tworzymy instancje, lecz teoretyczne poprzednie instancje powinny zostać nadpisane przez przypisanie nowych instancji do zmiennej head, tymczasem dane poprzednich instancji wciąż istnieją właśnie poprzez linkowanie atrybutem next_node. Domyślam się że może tutaj chodzić o zagadnienie referencji, ale jak może istnieć referencja do czegoś co nie ma przypisanej nazwy czy oznaczenia? Gdzie python umieszcza te dane? Albo co jest nie tak z moim rozumowaniem? Dzieki za ewentualne pochyleniem się nad pytaniem.

3

Nadal masz referencje do poprzednich w polu next_node

Z grubsza masz taką strukturę w pamięci:
screenshot-20221101114828.png

1

@jac:

Domyślam się że może tutaj chodzić o zagadnienie referencji, ale jak może istnieć referencja do czegoś co nie ma przypisanej nazwy czy oznaczenia?

To są nowe, różne obiekty; jak tworzysz strukturę, to na początek polecam, print do debugowania, można podejrzeć co się dzieje:

class Node:

    def __init__(self, data, next_node = None):

        self.data = data
        self.next_node = next_node


def print_linkedlist(head):
    tmp = head
    print("[", end="")
    while tmp is not None:
        print(tmp.data, end = " ")
        tmp = tmp.next_node
    print("]")


if __name__ == "__main__":
    head = Node("a")
    head = Node("b", head)
    head = Node("c", head)
    head = Node("d", head)
    print_linkedlist(head)

1 użytkowników online, w tym zalogowanych: 0, gości: 1