From 09cc5c0566a3efb603e6afca0b77325c0b9b2631 Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Thu, 5 Jul 2018 11:40:45 -0700 Subject: [PATCH 1/4] Speed up at_addrs with a dict. The old loop was O(mn). This is O(m+n). --- objgraph.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/objgraph.py b/objgraph.py index f20df07..32c3bd2 100755 --- a/objgraph.py +++ b/objgraph.py @@ -582,9 +582,12 @@ def at_addrs(address_set): .. versionadded:: 3.4 """ res = [] - for o in gc.get_objects(): - if id(o) in address_set: - res.append(o) + id_to_obj = dict((id(o), o) for o in gc.get_objects()) + + for i in address_set: + o = id_to_obj[i] + res.append(o) + return res From 21c7cb7cfd2127dcb412361e690dbcf9b4730963 Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Thu, 5 Jul 2018 14:54:01 -0700 Subject: [PATCH 2/4] flake --- objgraph.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/objgraph.py b/objgraph.py index 32c3bd2..ca3a0c0 100755 --- a/objgraph.py +++ b/objgraph.py @@ -583,7 +583,7 @@ def at_addrs(address_set): """ res = [] id_to_obj = dict((id(o), o) for o in gc.get_objects()) - + for i in address_set: o = id_to_obj[i] res.append(o) From 7f5e2e3f2410984903a757caa7e5dc6fa89cd7ab Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Mon, 9 Jul 2018 12:55:37 -0700 Subject: [PATCH 3/4] Ignore addresses not backed by objects. --- objgraph.py | 1 + 1 file changed, 1 insertion(+) diff --git a/objgraph.py b/objgraph.py index ca3a0c0..46b753b 100755 --- a/objgraph.py +++ b/objgraph.py @@ -585,6 +585,7 @@ def at_addrs(address_set): id_to_obj = dict((id(o), o) for o in gc.get_objects()) for i in address_set: + if i not in id_to_obj: continue # ignore non-existing objects. o = id_to_obj[i] res.append(o) From 775a796a1843fc7cdf250bea5601d9d14ce1c87d Mon Sep 17 00:00:00 2001 From: Yu Feng Date: Mon, 9 Jul 2018 13:03:15 -0700 Subject: [PATCH 4/4] lint --- objgraph.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/objgraph.py b/objgraph.py index 46b753b..140adcc 100755 --- a/objgraph.py +++ b/objgraph.py @@ -585,7 +585,8 @@ def at_addrs(address_set): id_to_obj = dict((id(o), o) for o in gc.get_objects()) for i in address_set: - if i not in id_to_obj: continue # ignore non-existing objects. + if i not in id_to_obj: # ignore non-existing objects. + continue o = id_to_obj[i] res.append(o)