Issue #2116: Weak references and weak dictionaries now support copy()ing and deepcopy()ing.
diff --git a/Lib/copy.py b/Lib/copy.py
index 3f2033f..d3db93d 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -49,6 +49,7 @@
 """
 
 import types
+import weakref
 from copy_reg import dispatch_table
 
 class Error(Exception):
@@ -102,7 +103,7 @@
 for t in (type(None), int, long, float, bool, str, tuple,
           frozenset, type, xrange, types.ClassType,
           types.BuiltinFunctionType, type(Ellipsis),
-          types.FunctionType):
+          types.FunctionType, weakref.ref):
     d[t] = _copy_immutable
 for name in ("ComplexType", "UnicodeType", "CodeType"):
     t = getattr(types, name, None)
@@ -220,6 +221,7 @@
 d[types.ClassType] = _deepcopy_atomic
 d[types.BuiltinFunctionType] = _deepcopy_atomic
 d[types.FunctionType] = _deepcopy_atomic
+d[weakref.ref] = _deepcopy_atomic
 
 def _deepcopy_list(x, memo):
     y = []