diff options
Diffstat (limited to 'Lib/weakref.py')
-rw-r--r-- | Lib/weakref.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/Lib/weakref.py b/Lib/weakref.py index 78b74ad320..88c60e7197 100644 --- a/Lib/weakref.py +++ b/Lib/weakref.py @@ -20,6 +20,8 @@ from _weakref import ( ProxyType, ReferenceType) +from _weakrefset import WeakSet + from exceptions import ReferenceError @@ -27,7 +29,7 @@ ProxyTypes = (ProxyType, CallableProxyType) __all__ = ["ref", "proxy", "getweakrefcount", "getweakrefs", "WeakKeyDictionary", "ReferenceError", "ReferenceType", "ProxyType", - "CallableProxyType", "ProxyTypes", "WeakValueDictionary"] + "CallableProxyType", "ProxyTypes", "WeakValueDictionary", 'WeakSet'] class WeakValueDictionary(UserDict.UserDict): @@ -85,6 +87,17 @@ class WeakValueDictionary(UserDict.UserDict): new[key] = o return new + __copy__ = copy + + def __deepcopy__(self, memo): + from copy import deepcopy + new = self.__class__() + for key, wr in self.data.items(): + o = wr() + if o is not None: + new[deepcopy(key, memo)] = o + return new + def get(self, key, default=None): try: wr = self.data[key] @@ -256,6 +269,17 @@ class WeakKeyDictionary(UserDict.UserDict): new[o] = value return new + __copy__ = copy + + def __deepcopy__(self, memo): + from copy import deepcopy + new = self.__class__() + for key, value in self.data.items(): + o = key() + if o is not None: + new[o] = deepcopy(value, memo) + return new + def get(self, key, default=None): return self.data.get(ref(key),default) |