@@ -987,7 +987,7 @@ def getmodule(object, _filename=None):
987987 return sys .modules .get (modulesbyfile [_filename ])
988988 # Compute hash to track moduleless objects
989989 code = _getcode (object )
990- hashcode = hash (code ) if code else None
990+ hashcode = id ( code ) ^ hash (code ) if code else None
991991 if hashcode and hashcode in _moduleless :
992992 return None
993993 # Try the cache again with the absolute file name
@@ -1000,19 +1000,7 @@ def getmodule(object, _filename=None):
10001000 return None
10011001 if file in modulesbyfile :
10021002 return sys .modules .get (modulesbyfile [file ])
1003- # Update the filename to module name cache and check yet again
1004- # Copy sys.modules in order to cope with changes while iterating
1005- for modname , module in sys .modules .copy ().items ():
1006- if ismodule (module ) and hasattr (module , '__file__' ):
1007- f = module .__file__
1008- if f == _filesbymodname .get (modname , None ):
1009- # Have already mapped this module, so skip it
1010- continue
1011- _filesbymodname [modname ] = f
1012- f = getabsfile (module )
1013- # Always map to the name the module knows itself by
1014- modulesbyfile [f ] = modulesbyfile [
1015- os .path .realpath (f )] = module .__name__
1003+ _update_module_file_name_cache ()
10161004 if file in modulesbyfile :
10171005 return sys .modules .get (modulesbyfile [file ])
10181006 # Check the main module
@@ -1033,6 +1021,20 @@ def getmodule(object, _filename=None):
10331021 _moduleless .add (hashcode )
10341022 return None
10351023
1024+ def _update_module_file_name_cache ():
1025+ """Update the filename to module name cache."""
1026+ # Copy sys.modules in order to cope with changes while iterating
1027+ for modname , module in sys .modules .copy ().items ():
1028+ if ismodule (module ) and hasattr (module , '__file__' ):
1029+ f = module .__file__
1030+ if f == _filesbymodname .get (modname , None ):
1031+ # Have already mapped this module, so skip it
1032+ continue
1033+ _filesbymodname [modname ] = f
1034+ f = getabsfile (module )
1035+ # Always map to the name the module knows itself by
1036+ modulesbyfile [f ] = modulesbyfile [
1037+ os .path .realpath (f )] = module .__name__
10361038
10371039class ClassFoundException (Exception ):
10381040 pass
0 commit comments