Q:

Why is a list of transforms within a class deleted when the class instance gets copied to a list?

I have this problem in Unity (or maybe C#) that's very weird to me. Here is a virtual class:
public abstract class ActionTaken : MonoBehaviour {
    protected char type;
    protected Transform minionTakingAction;
    public abstract void activate();
}

And this virtual class is a parent to the one that interests me:
public class AbilityTaken : ActionTaken
{
    public int index;
    List<Transform> selectedFriendlyMinions;
    List<Transform> selectedEnemyMinions;
    List<Transform> selectedTiles;
    public override void activate()
    {
        //The value here is 0 !!! And it should be 1...
        Debug.Log(selectedEnemyMinions.Count);
        if (selectedFriendlyMinions.Count == 0 && selectedEnemyMinions.Count == 0 && selectedTiles.Count == 0 )
        {
            minionTakingAction.GetComponentInParent<AbilitiesActivation>().activateAbility(index);
        }
        else
        {
            minionTakingAction.GetComponentInParent<AbilitiesActivation>().activateAbility(index, selectedFriendlyMinions, selectedEnemyMinions, selectedTiles);
        }
    }

    public AbilityTaken(Transform _minionTakingAction, int abilityIndex, List<Transform> _selectedFriendlyMinions, List<Transform> _selectedEnemyMinions, List<Transform> _selectedTiles) 
    {
        type = 'S'; 
        minionTakingAction = _minionTakingAction;
        index = abilityIndex;
        selectedEnemyMinions = _selectedEnemyMinions;
        selectedFriendlyMinions = _selectedFriendlyMinions;
        selectedTiles = _selectedTiles;
        //The value here is 1 !!!
        Debug.Log(selectedEnemyMinions.Count);
    }
    public AbilityTaken(Transform _minionTakingAction, int abilityIndex)
    {
        type = 'S';
        minionTakingAction = _minionTakingAction;
        index = abilityIndex;
        selectedFriendlyMinions = new List<Transform>();
        selectedEnemyMinions = new List<Transform>();
        selectedTiles = new List<Transform>();
    }
}

As you can see in the comments, the value of selectedEnemyMinions list of Transforms changes from the constructor (count value: 1) to the "activate()" function (count value: 0), without me making any changes to it. All I do is:
1. I create a new instance of AbilityTaken giving to the constructor an enemyMinionSelection list with 1 element
2. I add abilityTaken to a list
3. I call activate() from LateUpdate()
AbilityTaken abilityTaken = new AbilityTaken(minionTakingAction, gameMaster.abilitySelected,
                       // value of enemyMinionSelected.Count here is 1
 new List<Transform>(), gameMaster.enemyMinionsSelected, new List<Transform>());
List<ActionsTaken> actionsTaken = new List<ActionTaken>();
actionsTaken.Add(abilityTaken);

private void LateUpdate()
{
    if (!actionInProgress &&
        actionsTaken.Count>0)
    {
        ActionTaken currentAction = actionsTaken[0];
        currentAction.activate();
    }
}

If you can tell me why adding the class instance to List and accessing this instance would cause a member List of Transforms to change their value, that would be great. On the other hand the value of member variable "index" doesn't change (it's always 1). I tried changing Lists to public but that doesn't help as expected.

A:

I thoroughly debugged my code and found that the problem here is that I am giving the 
 constructor of ActionTaken parameters (Namely List) that get changed after assignment in ActionTaken constructor. Then I execute some code that changes the first list of transforms, but due to C# not copying the value, but referencing the assigned value the List of Transforms changes when the firstly assigned value changes. 
void function()
{
//Some code here
      AbilityTaken abilityTaken = new AbilityTaken(minionTakingAction, gameMaster.abilitySelected, new List<Transform>(), gameMaster.enemyMinionsSelected, new List<Transform>())
//Here we go in the constructor and everything seems fine
// ! Some code here that changes gameMaster.enemyMinionsSelected. The class object doesn't copy the List of Transforms, but references it's address and when it changes, the reference in ActionTaken also changes.
}

