Last active
December 10, 2015 18:29
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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