I thought that Unity, when creating my objects, would attach a copy of ScriptB to it which it does!!
I then thought I could change the variable from ScriptA using
Getcomponent(ScriptB).life–;
Which you can!
Problem is I was making the life variable static which create only one life variable which can be seen by all scripts and thus when I change it all objects are affected it.
Solution- Use getCompoent but do not make my life variable a static.