summaryrefslogtreecommitdiff
path: root/Lib/weakref.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/weakref.py')
-rw-r--r--Lib/weakref.py26
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)