@@ -1321,15 +1321,14 @@ def _asdict_inner(obj, dict_factory):
13211321 # generator (which is not true for namedtuples, handled
13221322 # above).
13231323 return type (obj )(_asdict_inner (v , dict_factory ) for v in obj )
1324- elif isinstance (obj , dict ) and hasattr (type (obj ), 'default_factory' ):
1325- # obj is a defaultdict, which has a different constructor from
1326- # dict as it requires the default_factory as its first arg.
1327- # https://bugs.python.org/issue35540
1328- result = type (obj )(getattr (obj , 'default_factory' ))
1329- for k , v in obj .items ():
1330- result [_asdict_inner (k , dict_factory )] = _asdict_inner (v , dict_factory )
1331- return result
13321324 elif isinstance (obj , dict ):
1325+ if hasattr (type (obj ), 'default_factory' ):
1326+ # obj is a defaultdict, which has a different constructor from
1327+ # dict as it requires the default_factory as its first arg.
1328+ result = type (obj )(getattr (obj , 'default_factory' ))
1329+ for k , v in obj .items ():
1330+ result [_asdict_inner (k , dict_factory )] = _asdict_inner (v , dict_factory )
1331+ return result
13331332 return type (obj )((_asdict_inner (k , dict_factory ),
13341333 _asdict_inner (v , dict_factory ))
13351334 for k , v in obj .items ())
@@ -1382,7 +1381,15 @@ def _astuple_inner(obj, tuple_factory):
13821381 # above).
13831382 return type (obj )(_astuple_inner (v , tuple_factory ) for v in obj )
13841383 elif isinstance (obj , dict ):
1385- return type (obj )((_astuple_inner (k , tuple_factory ), _astuple_inner (v , tuple_factory ))
1384+ obj_type = type (obj )
1385+ if hasattr (obj_type , 'default_factory' ):
1386+ # obj is a defaultdict, which has a different constructor from
1387+ # dict as it requires the default_factory as its first arg.
1388+ result = obj_type (getattr (obj , 'default_factory' ))
1389+ for k , v in obj .items ():
1390+ result [_astuple_inner (k , tuple_factory )] = _astuple_inner (v , tuple_factory )
1391+ return result
1392+ return obj_type ((_astuple_inner (k , tuple_factory ), _astuple_inner (v , tuple_factory ))
13861393 for k , v in obj .items ())
13871394 else :
13881395 return copy .deepcopy (obj )
0 commit comments