so if I’m understanding this correctly, the id is being recycled.
import ast
code = r"""
def func():
var = 5
var2 = 10
print(var2)
"""
tree = ast.parse(code)
record = []
for node in ast.walk(tree):
record.append(node)
print(node)
should prevent that happening.
But running on Python 3.14, I see output
Module(body=[FunctionDef(name='func', args=arguments(posonlyargs=[], args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), body=[Assign(targets=[Name(...)], value=Constant(...), type_comment=None)], decorator_list=[], returns=None, type_comment=None, type_params=[]), ..., Expr(value=Call(func=Name(...), args=[Name(...)], keywords=[]))], type_ignores=[])
FunctionDef(name='func', args=arguments(posonlyargs=[], args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), body=[Assign(targets=[Name(id='var', ctx=Store(...))], value=Constant(value=5, kind=None), type_comment=None)], decorator_list=[], returns=None, type_comment=None, type_params=[])
Assign(targets=[Name(id='var2', ctx=Store())], value=Constant(value=10, kind=None), type_comment=None)
Expr(value=Call(func=Name(id='print', ctx=Load(...)), args=[Name(id='var2', ctx=Load(...))], keywords=[]))
arguments(posonlyargs=[], args=[], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[])
Assign(targets=[Name(id='var', ctx=Store())], value=Constant(value=5, kind=None), type_comment=None)
Name(id='var2', ctx=Store())
Constant(value=10, kind=None)
Call(func=Name(id='print', ctx=Load()), args=[Name(id='var2', ctx=Load())], keywords=[])
Name(id='var', ctx=Store())
Constant(value=5, kind=None)
Store()
Name(id='print', ctx=Load())
Name(id='var2', ctx=Load())
Store()
Load()
Load()
so I don’t know how you’re even getting your output.