# HG changeset patch
# User Robert Bradshaw <robertwb@math.washington.edu>
# Date 1228256529 28800
# Node ID 271b85456f9c56cbc95f7e007cc440a165411b62
# Parent  186599acb5d1acdaf337981a72df97855262bb2e
[mq]: 4639-coerce-leak

diff -r 186599acb5d1 -r 271b85456f9c sage/categories/homset.py
--- a/sage/categories/homset.py	Tue Dec 02 13:46:54 2008 -0800
+++ b/sage/categories/homset.py	Tue Dec 02 14:22:09 2008 -0800
@@ -60,7 +60,8 @@
     key = (X,Y,cat)
     if _cache.has_key(key):
         H = _cache[key]()
-        if H: return H
+        if H and H._domain is X and H._codomain is Y:
+            return H
 
     if cat is None or (cat is X.category() and cat is Y.category()):
         try:
@@ -149,7 +150,7 @@
         else:
             H = Homset(X, Y, cat)
             
-    ##_cache[key] = weakref.ref(H)
+    _cache[key] = weakref.ref(H)
     _cache[(X, Y, cat)] = weakref.ref(H)
     
     return H
diff -r 186599acb5d1 -r 271b85456f9c sage/rings/finite_field_morphism.py
--- a/sage/rings/finite_field_morphism.py	Tue Dec 02 13:46:54 2008 -0800
+++ b/sage/rings/finite_field_morphism.py	Tue Dec 02 14:22:09 2008 -0800
@@ -3,7 +3,26 @@
 from sage.rings.integer import Integer
 from sage.structure.sequence import Sequence
 
-class FiniteFieldHomset(RingHomset_generic):
+import weakref
+
+_cache = {}
+def FiniteFieldHomset(R, S):
+    """
+    TESTS:
+        sage: F = GF(13)
+        sage: Hom(F,F) is Hom(F,F)
+        True
+    """
+    key = R,S
+    if _cache.has_key(key):
+        H = _cache[key]()
+        if H:
+            return H
+    H = FiniteFieldHomset_class(R,S)
+    _cache[key] = weakref.ref(H)
+    return H
+
+class FiniteFieldHomset_class(RingHomset_generic):
     """
     Set of homomorphisms with domain a given finite field.
     """
