FindGameObjectsWithTag returning strange number of GameObjects

I’m running a targeting script which attempts to find the number of enemies on the map and place them in an array which can then later be sorted. While Debug.Log(EnemyList.Length) returns the appropriate number of enemies (usually around 5) it is looped over 40 times in the console. Any ideas why this might be happening?

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TowerBehavior : MonoBehaviour {

    public long health;
    public long range;
    public List <GameObject> enemies;

    void Start () {
        enemies = new List<GameObject> ();
        StartCoroutine (AquireTarget ());
    }

    void Update () {
        if (health <= 0) {
            transform.position = new Vector3(0,-100,0);
        }
    }

    IEnumerator AquireTarget() {
        while (true) {
            yield return new WaitForSeconds (5);
            AddEnemiesToList ();
        }
    }

    private void AddEnemiesToList () {
        GameObject[] EnemyList = GameObject.FindGameObjectsWithTag ("Enemy");
        foreach (GameObject x in EnemyList) {
            AddTarget(x);
            Debug.Log (EnemyList.Length);
        }
    }
   
    private void AddTarget(GameObject t) {
        enemies.Add (t);
    }



    void OnTriggerEnter(Collider col) {
        if (col.gameObject.tag == "Enemy") {
            health = health -10;
        }
    }
}

Ok so I think I’ve figured it out but please correct me if i’m wrong.

Apparently when you have a script attached to a prefab and then you instantiate multiple instance of that prefab you also get multiple instances of the attached script as well. I had 40 instances of the tower spawned on the map and therefore the debug.log was run 40 times. I’m dumb.