Μετάβαση στο κύριο περιεχόμενο
🔒 Λειτουργία προεπισκόπησης. Τα πρώτα δεκαπέντε μαθήματα Foundations είναι δωρεάν· αυτό είναι Pro. Ξεκινήστε ένα 7ήμερο trial για να ξεκλειδώσετε τον επεξεργαστή, τις υποδείξεις AI και το υπόλοιπο του προγράμματος. Απαιτείται κάρτα, ακυρώνετε οποιαδήποτε στιγμή από το Dashboard.Ξεκινήστε 7ήμερο trial →
← ΜαθήματαSenior Deep-DivesModule 4 · Memory + profiling · RecapΔιαρροές μνήμης: κύκλοι και αδύναμη αναφοράpredict98 / 161
+100 XP
Εργασία
📝 **Εργασία:** Προβλέψτε την ακριβή έξοδο. Δύο στιγμιότυπα «Κόμβου» δείχνουν η μία προς την άλλη («a.peer = b», «b.peer = a») — ένας κύκλος επαναμέτρησης. Το "gc.disable()" σταματά τη συλλογή κύκλου. Μετά το «del a» + «del b», η επαναμέτρηση του καθενός εξακολουθεί να είναι 1 (από τον ομότιμο) οπότε κανένας από τους δύο δεν πεθαίνει. Μόνο το `gc.collect()` βρίσκει και διακόπτει τον κύκλο, ενεργοποιώντας και τις δύο οριστικοποιημένες επανακλήσεις. 📋 Υλοποιήστε την παραπάνω λειτουργία. Οι δοκιμές εκτελούνται αυτόματα. 💡 **Υπόδειξη:** Ξαναδιάβασε τη θεωρία αν κολλήσεις.
Πρόβλεψε έξοδο

Διάβασε τον κώδικα προσεκτικά

import gc
import weakref

deaths = []


def watcher(name):
    deaths.append(name)


class Node:
    def __init__(self, name):
        self.name = name
        self.peer = None


a = Node("a")
b = Node("b")
a.peer = b
b.peer = a
weakref.finalize(a, watcher, "a")
weakref.finalize(b, watcher, "b")

gc.disable()
del a
del b
print(f"after_del:{deaths}")

gc.collect()
print(f"after_gc:{sorted(deaths)}")
gc.enable()

Τι θα εμφανίσει το πρόγραμμα; Γράψε εδώ:

💬 Συζήτηση

Γίνε ο πρώτος — κάνε μια ερώτηση ή μοιράσου μια συμβουλή.
Σύνδεση για να συμμετάσχεις στη συζήτηση. Η ανάγνωση είναι δωρεάν.
Φόρτωση συζήτησης…