Python: deeply copy ast node tree
I'm trying to use deepcopy
(from the copy
m开发者_开发问答odule) to deeply copy a node tree from the ast
module.
This doesn't seem to work. I'm getting strange errors like TypeError: required field "name" missing from FunctionDef
when I use the copied result (and I checked it; it really is missing in the copied node), so it didn't correctly copied them.
Is there a trick I can make this working? Or maybe am I missing something?
Sorry, I was wrong. copy.deepcopy
seems to work correct. The reason I thought it wouldn't work is because of this very odd behavior:
import ast, copy
n = ast.FunctionDef(
name=None,
args=ast.arguments(args=[], vararg=None, kwarg=None, defaults=[]),
body=[], decorator_list=[])
n.name = "foo"
ast.fix_missing_locations(n)
n = copy.deepcopy(n)
print n.name
This returns None
in PyPy. Probably a bug because in CPython 2.6, I get foo
. Strangely, in PyPy, if I remove name=None
from the ast.FunctionDef
call, I also get foo
as the output.
I created a bug report for PyPy about this.
精彩评论