Yes, the circle is unreferenced. It is not previous picked. So it just adds the circle to the previous picked list.
An other way to understand this is .. to state that for the circle it is the first 'top event'. So its previous picked list was forgotten.
It is way more clear then i can ever explain it. You are not the only one. A lot of beginners are using Contruct the wrong way. And i, me myself, still fall in that trap. Why i dont consider myself as a avid user.
But serious, once you got the hang on picking objects, the system is absolutly beatyfull.
Now you would ask, how do i forget a picked list ? Just make a new top level pick event. A function is very handy, it is a top level event.
On more thing on optimizing. You captured that there are loops behind the scenes. If you make a condition like 'pick by comparisation' it loops behind the scenes trough all the specified objects and compares them to what you want em them to compare to. Those loops are just inevitable. And to be honest, dont worry about them to much.
Unless they look for overlaps and collisions. Those are performance eaters.
I have Two examples for you. This one should explain what happens. How it picks. It is importand to understand this.
https://www.dropbox.com/s/4kofww888ajdw ... .capx?dl=0
This one showes a way to minimize collission dedections. It comes down to make 'behind the scenes loops' that dont check for overlaps/collissions. So, forget all the other optimizing you have read about. (that statement gonna make me public enemy nr1, hehe)
https://www.dropbox.com/s/awhfbsw9n04do ... .capx?dl=0
Check the debugger and enjoy a collission dedection of only ONE every tick.
Do i recoment this ? I dont know. Construct is supposed to be easy. This aint easy coding for most.
You seem to understand those things.