@@ -60,23 +60,28 @@ def _parse_custom_events(record, include_extra_attributes):
6060def _remove_circular_dependencies (obj , memo = None ):
6161 if memo is None :
6262 memo = set ()
63+
6364 # Skip immutable types, which can't contain circular dependencies
64- if isinstance (obj , (str , int , float , bool )):
65+ if isinstance (obj , (str , int , float , bool , type ( None ) )):
6566 return obj
66- if id (obj ) in memo :
67+
68+ # For mutable objects, check for circular references
69+ obj_id = id (obj )
70+ if obj_id in memo :
6771 return "<omitted circular reference>"
68- memo .add (id (obj ))
72+ memo .add (obj_id )
73+
6974 if isinstance (obj , dict ):
7075 new_dict = {}
7176 for key , value in obj .items ():
72- new_dict [key ] = _remove_circular_dependencies (value , memo )
77+ new_dict [key ] = _remove_circular_dependencies (value , memo . copy () )
7378 return new_dict
7479 elif isinstance (obj , list ):
75- return [_remove_circular_dependencies (item , memo ) for item in obj ]
80+ return [_remove_circular_dependencies (item , memo . copy () ) for item in obj ]
7681 elif isinstance (obj , tuple ):
77- return tuple (_remove_circular_dependencies (item , memo ) for item in obj )
82+ return tuple (_remove_circular_dependencies (item , memo . copy () ) for item in obj )
7883 elif isinstance (obj , set ):
79- return {_remove_circular_dependencies (item , memo ) for item in obj }
84+ return {_remove_circular_dependencies (item , memo . copy () ) for item in obj }
8085 else :
8186 return obj
8287
0 commit comments