parent pointers in AST nodes hurt deepcopy performance #63
Description
Obligatory "I'm a huge fan of your work".
Background: I maintain a library called ipyflow, which uses another library I maintain called pyccolo. I noticed that on ipython >= 8.0, which uses executing
for better stack traces, ipyflow would have really bad performance regressions the first time after a cell throws some exception.
Eventually I traced it to pyccolo's use of copy.deepcopy
in a few places -- performance was bad because the parent pointers that executing
added to AST nodes were causing deepcopy to do a lot of extra unnecessary work.
I ended up working around it on the pyccolo side, but I figured you may be interested in this for other libraries that may want to use executing
and get surprised when deepcopy
has bad perf. The way we maintain deepcopy-ability in pyccolo is to maintain a mapping from id(node) to parent for parent pointers, which avoids setting an attribute on the AST node directly.
Thanks for this great library!