[docs]defasdict(obj,/,*,secure=True):ifhasattr(obj,"_asdict"):returnobj._asdict(secure=secure)iftype(obj)indataclasses._ATOMIC_TYPES:returnobjifdataclasses._is_dataclass_instance(obj):# fast path for the common casereturn{f.name:asdict(getattr(obj,f.name),secure=secure)forfindataclasses.fields(obj)}ifisinstance(obj,tuple)andhasattr(obj,"_fields"):returntype(obj)(*[asdict(v,secure=secure)forvinobj])ifisinstance(obj,(list,tuple)):returntype(obj)(asdict(v,secure=secure)forvinobj)ifisinstance(obj,dict):ifhasattr(type(obj),"default_factory"):# obj is a defaultdict, which has a different constructor from# dict as it requires the default_factory as its first arg.result=type(obj)(getattr(obj,"default_factory"))fork,vinobj.items():result[asdict(k,secure=secure)]=asdict(v,secure=secure)returnresultreturntype(obj)((asdict(k,secure=secure),asdict(v,secure=secure))fork,vinobj.items())returncopy.deepcopy(obj)