@@ -64,10 +64,14 @@ def varmap(func, var, context=None, name=None, **kwargs):
6464 return func (name , "<...>" , ** kwargs )
6565 context .add (objid )
6666 if isinstance (var , dict ):
67+ # Apply func() before recursion, so that `shorten()` doesn't have to iterate over all the trimmed values
68+ ret = func (name , var , ** kwargs )
6769 # iterate over a copy of the dictionary to avoid "dictionary changed size during iteration" issues
68- ret = func ( name , dict ((k , varmap (func , v , context , k , ** kwargs )) for k , v in var .copy ().items ()), ** kwargs )
70+ ret = dict ((k , varmap (func , v , context , k , ** kwargs )) for k , v in ret .copy ().items ())
6971 elif isinstance (var , (list , tuple )):
70- ret = func (name , [varmap (func , f , context , name , ** kwargs ) for f in var ], ** kwargs )
72+ # Apply func() before recursion, so that `shorten()` doesn't have to iterate over all the trimmed values
73+ ret = func (name , var , ** kwargs )
74+ ret = [varmap (func , f , context , name , ** kwargs ) for f in ret ]
7175 else :
7276 ret = func (name , var , ** kwargs )
7377 context .remove (objid )
0 commit comments