Извините, я ошибся.copy.deepcopy
, кажется, работает правильно.Причина, по которой я думал, что это не сработает, из-за этого очень странного поведения:
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
Возвращает None
в PyPy.Вероятно, ошибка, потому что в CPython 2.6 я получаю foo
.Странно, но в PyPy, если я удаляю name=None
из вызова ast.FunctionDef
, я также получаю foo
в качестве вывода.
Я создал отчет об ошибке для PyPy по этому поводу.