I have looked in the official documentation for python, but i cannot seem to find what a reference cycle is. Could anyone please clarify what it is for me, as i am trying to understand the GC module. Thank you in advance for your replies.
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
A reference cycle simply means one or more objects referencing each other, such that if you drew it out on paper with arrows representing the dependencies you would see a cycle.
The (almost) simplest reference cycle is having two objects
a
andb
that refer to each other:Naive garbage collectors work strictly off of whether or not an object is referenced by another object. In this case, if both
a
andb
are not referred to by anything else, they still refer to each other and a naive garbage collector may not reclaim the memory. (I don't know if Python can be trapped by reference cycles or not, though.)EDIT: The simplest reference cycle is an object that refers to itself:
Now here variable
x
is referring to itself, this is called reference cycle.This is a reference cycle:
The first element of
l
, i.e.l[0]
, is now a cyclic reference tol
itself.This creates a list object referred by a variable named
aRef
. thefirst element
in the list object is a reference to itself. In this case, thedel aRef
dereferenceaRef
to the list object. However, the reference count of the list object does not decrease to zero and the list object is not garbage collected, since the list object still refers to itself. In this case, the garbage collector in Python will periodically check if such circular references exist and the interpreter will collect them. The following is an example to manually collect the space used by circular referenced objects.