From 6b96ecb0ab8d06b7c11d1b82baebc47452a7b13e Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 3 Apr 2010 03:14:28 +0000 Subject: Improve clear() method. Keeps key/value refcnts >= 1 until final dict.clear() so that decrefs to zero won't trigger arbitrary code . Also runs a bit faster. --- Lib/collections.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Lib/collections.py b/Lib/collections.py index 1f1f510..79f6696 100644 --- a/Lib/collections.py +++ b/Lib/collections.py @@ -107,8 +107,14 @@ class OrderedDict(dict, MutableMapping): def clear(self): 'od.clear() -> None. Remove all items from od.' - for k in dict.keys(self): - del self[k] + try: + for node in self.__map.itervalues(): + del node[:] + self.__root[:] = [self.__root, self.__root, None] + self.__map.clear() + except AttributeError: + pass + dict.clear(self) setdefault = MutableMapping.setdefault update = MutableMapping.update -- cgit v0.12