If I do something like this:

List<int> a = new List<int>();
List<int> b = new List<int>();

a.Add(1);
a.Add(2);

b = a;

a.Clear();

foreach (var item in b)
   Debug.Log(item);

‘b’ will also be cleared, and therefore the debug.log() messages won’t appear.
Why could this happen?

List is a class, i.e. a reference type.
As soon as you reach the line with b = a, the variable b will no longer reference it’s own list object that you’ve created before with the new operator.

Instead, it now references the same List object that variable a already holds a reference to. Any changes via variable a or b will now affect the same list object.
The other one will no longer be accessible and thus garbage collected unless you had another variable which references that list object.