Some problems with the list

Hi I had a problem with the list, I spent two days and solved it, but I want to understand what it was.
I have a private List “Vector3” in my Player script and another private List “Vector3” in the Level Script. When the game starts, the Player List is updated correctly, but then I update the Player List from the Level Script by calling the function:

void SetWaypoints()
{
      Player.SetWaypoints(Level_List);
}

public void SetWaypoints(List<Vector3> list)
{
      Player_List = list;
}

My player list is updated and after that the player list remains clean.
My function adds vectors to the player list, but the player list remains clean.
I don’t call any other list cleaners and this function is no longer called.
When I figured out the problem, I wrote this function and all the problems went away.

    public void SetWaypoints(List<Vector3> list)
    {
        Player_List.Clear();
        for(int i = 0;i<list.Count;i++)
        {
            Player_List.Add(list*);*

}
}
Finally, the question is: Why does the list work this way? Is this a bug?
Unity version: 2019.2.18f1

Player_List is a reference type.

List<> is a class, and as such, a variable of type List<> is a reference. What this means is that the data contained in the variable is a pointer/reference to the data where the List<> actually is in memory. If you assign to it, you don’t alter the data, you just alter the variable itself.

When you did this:

public void SetWaypoints(List<Vector3> list)
{
    Player_List = list;
}

You didn’t alter the list that Player_List is referencing, you made it reference a different list.

However, Clear() and Add() are methods belonging to the list, and when you did them, you altered the original.