Skip to content
Rezha Julio
Go back

Implementing weak references in Python

1 min read

Normal Python references to objects increment the object’s reference count thus preventing it from being garbage collected.

If a user desires creating weak references, the weakref module can be used:

import weakref
class Rezha(object): pass

To create a weak reference, the ref class is used:

# object instance
rezha = Rezha()
# weak reference to our object
r = weakref.ref(rezha)

Then, you can call the reference object:

print(r)
# <weakref at 0x01414E40; to 'Rezha'...>
print(r())
# <__main__.Rezha object at 0x0133D270>

If the reference no longer exists, calling it returns None:

del rezha
print(r())
# None

To check the existence of the reference:

if r is not None:
# reference exists!

Weak references are often used to implement caching for large objects, but also for implementing cyclic references.

Imagine the case where object X references object Y and Y references X. Without a cycle-detecting garbage collector, the two objects would never be garbage collected. However, if one of the references is weak, they will be properly garbage collected.


Related Posts


Previous Post
There is more to copying
Next Post
Translating Scanner tokens into primitive types