Instantiating gameObejcts that can't be referred to after creation

I’m making a card game that allows players to make tokens with customised rules/text based on text placed in an input field. The first token comes out great, but if I repeat the creation process at runtime again, it adds double the amount of tokens and changes the original token’s text rules as well as the new ones. This is what my script looks like:

public void CreateToken()
            DropZone = GameObject.Find("Drop Zone");
            Token = Instantiate(Token, new Vector2(0, 0), Quaternion.identity);
            Token.transform.SetParent(DropZone.transform, false);
            Token.layer = LayerMask.NameToLayer("Cards");
            CardName = GameObject.Find("CardType").GetComponent<Text>();
            CardRule = GameObject.Find("Rules").GetComponent<Text>();
            CardStats = GameObject.Find("PowDef").GetComponent<Text>();
            CardName.text = TokenName.text;
            CardRule.text = TokenRule.text;
            CardStats.text = TokenStats.text;

This script is placed in the pop up menu token creator. Is there any way to make each instantiated token unique and unreferrable by the token menu once it’s instantiated?

Thanks in advance.

Ok, so I managed to figure out how to not change the stats in already instatiated tokens by replacing the GameObject.Find with this:

CardName = Token.transform.Find("CardType").GetComponent<Text>();
        CardRule = Token.transform.Find("Rules").GetComponent<Text>();
        CardStats = Token.transform.Find("PowDef").GetComponent<Text>();

Now I just need to fix the script from instantiating tokens that have already been created. Would a bool help this?