Actually this is a pretty good point and I may use the “tree” name including the object method if possible.
But I need to load some variables for every object globally, so that each scene can access it (e.g. Shop, Repair, Level1… Level2, all can access the current Turrent stats, for example). I actually used Ship just as a random term. 
So I would probably end up with Global variables such as Turret1.Stat1, Turret1.Stat2, Turret1.Stat3; Turret2.Stat, and so forth. Not for each turret instance, of course, but for each turret type (so for each Turret1 that is yet to be placed/doesn’t exist on map yet, or even in the entire level, such as Upgrade or Shop scenes, and so for each Turret of type 2 as well).
So, for example, when I create a Turret 1 instance, it will get those stats (e.g. upgraded speed of rotation, strength of fire, etc.), even though no Turret 1 exists yet on the map. And when I want to upgrade the Turret 1 stats in e.g. Upgrade shop, I would be upgrading those global variables rather than object variables directly (as the objects don’t actually exist in this scene). Also, each Turret of one type will have exactly the same stats (e.g. you can’t upgrade just one turret of a type), so I don’t have a big instancing issue, I just need to save, load, and share those stats properly across every scene.
Edit: I reread your point, and it may actually work completely. But I would rather load those variables from memory when sharing across scenes such as current map, or shop, or upgrade shop (as currently I need to set variable values for each created instance, once an instance gets created), so perhaps still some kind of global variables. I’ll give it some though, there might be a better way. 