@@ -1321,15 +1321,14 @@ def _asdict_inner(obj, dict_factory):
1321
1321
# generator (which is not true for namedtuples, handled
1322
1322
# above).
1323
1323
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
1332
1324
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
1333
1332
return type (obj )((_asdict_inner (k , dict_factory ),
1334
1333
_asdict_inner (v , dict_factory ))
1335
1334
for k , v in obj .items ())
@@ -1382,7 +1381,15 @@ def _astuple_inner(obj, tuple_factory):
1382
1381
# above).
1383
1382
return type (obj )(_astuple_inner (v , tuple_factory ) for v in obj )
1384
1383
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 ))
1386
1393
for k , v in obj .items ())
1387
1394
else :
1388
1395
return copy .deepcopy (obj )
0 commit comments