Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@niwinz
Last active December 10, 2015 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niwinz/4475138 to your computer and use it in GitHub Desktop.
Save niwinz/4475138 to your computer and use it in GitHub Desktop.
Memory leak when you create alias methods once the class has been instantiated.
[3/5.0.2]niwi@localhost:~/tmp-memory-leak> python3 simple-test.py
Memory leak:
KK.__init__ 139987115392208
Foo.__init__ 139987115392016
No memory leak:
KK.__init__ 139987115392400
Bar__init__ 139987115392272
Bar.__del__ 139987115392272
KK.__del__ 139987115392400
Loop Foo:
KK.__init__ 139987115392400
Foo.__init__ 139987115392272
KK.__init__ 139987115392528
Foo.__init__ 139987115392464
KK.__init__ 139987115392656
Foo.__init__ 139987115392592
KK.__init__ 139987115392784
Foo.__init__ 139987115392720
KK.__init__ 139987115392912
Foo.__init__ 139987115392848
Loop Bar:
KK.__init__ 139987115393104
Bar__init__ 139987115392976
KK.__init__ 139987115393232
Bar__init__ 139987115393168
Bar.__del__ 139987115392976
KK.__del__ 139987115393104
KK.__init__ 139987115393104
Bar__init__ 139987115392976
Bar.__del__ 139987115393168
KK.__del__ 139987115393232
KK.__init__ 139987115393232
Bar__init__ 139987115393168
Bar.__del__ 139987115392976
KK.__del__ 139987115393104
KK.__init__ 139987115393104
Bar__init__ 139987115392976
Bar.__del__ 139987115393168
KK.__del__ 139987115393232
Bar.__del__ 139987115392976
KK.__del__ 139987115393104
[3/5.0.2]niwi@localhost:~/tmp-memory-leak> python2 simple-test.py
Memory leak:
KK.__init__ 140281337651984
Foo.__init__ 140281337651920
No memory leak:
KK.__init__ 140281337652176
Bar__init__ 140281337652112
Bar.__del__ 140281337652112
KK.__del__ 140281337652176
Loop Foo:
KK.__init__ 140281337652240
Foo.__init__ 140281337652176
KK.__init__ 140281337652368
Foo.__init__ 140281337652304
KK.__init__ 140281337652496
Foo.__init__ 140281337652432
KK.__init__ 140281337652624
Foo.__init__ 140281337652560
KK.__init__ 140281337652752
Foo.__init__ 140281337652688
Loop Bar:
KK.__init__ 140281337652880
Bar__init__ 140281337652816
KK.__init__ 140281337653008
Bar__init__ 140281337652944
Bar.__del__ 140281337652816
KK.__del__ 140281337652880
KK.__init__ 140281337652880
Bar__init__ 140281337652816
Bar.__del__ 140281337652944
KK.__del__ 140281337653008
KK.__init__ 140281337653008
Bar__init__ 140281337652944
Bar.__del__ 140281337652816
KK.__del__ 140281337652880
KK.__init__ 140281337652880
Bar__init__ 140281337652816
Bar.__del__ 140281337652944
KK.__del__ 140281337653008
Bar.__del__ 140281337652816
KK.__del__ 140281337652880
# -*- coding: utf-8 -*-
from __future__ import print_function
class KK(object):
def __init__(self):
print("KK.__init__", id(self))
def __del__(self):
print("KK.__del__", id(self))
class Foo(object):
def __init__(self):
self.echo_bar = self.echo_foo
self.kk = KK()
print("Foo.__init__", id(self))
def echo_foo(self):
print("Foo")
def __del__(self):
print("Foo.__del__", id(self))
class Bar(object):
def __init__(self):
self.kk = KK()
print("Bar__init__", id(self))
def echo_foo(self):
print("Fooo")
def __del__(self):
print("Bar.__del__", id(self))
if __name__ == "__main__":
print("Memory leak:")
foo = Foo()
foo = None
print("\nNo memory leak:")
bar = Bar()
bar = None
print("\nLoop Foo:")
for x in range(5):
f = Foo()
print("\nLoop Bar:")
for x in range(5):
b = Bar()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment