The callable function of axesShape's GUP is precomputed and stored in the private data variable. When the GUP changes (via gup method) the previous GUP is retained by this data variable. It is generally expected that a call to gup will always be proceeded by a call to data.
To support an alternative scenario the data variable needs to invalidated and potentially computed lazily.