Issue #2116: Weak references and weak dictionaries now support copy()ing and deepcopy()ing.

This commit is contained in:
Antoine Pitrou 2009-05-15 16:54:52 +00:00
parent 52035a04ab
commit 775fd66d7b
4 changed files with 116 additions and 1 deletions

View file

@ -85,6 +85,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 +267,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)