Why is list1Instance and p lists in the Main method of the below code pointing to the same collection?
class Person
    {
        public string FirstName = string.Empty;
        public string LastName = string.Empty;
        public Person(string firstName, string lastName) {
            this.FirstName = firstName;
            this.LastName = lastName;
        }
    }
    class List1
    {
        public List<Person> l1 = new List<Person>();
        public List1()
        {
            l1.Add(new Person("f1","l1"));
            l1.Add(new Person("f2", "l2"));
            l1.Add(new Person("f3", "l3"));
            l1.Add(new Person("f4", "l4"));
            l1.Add(new Person("f5", "l5"));
        }
        public IEnumerable<Person> Get()
        {
            foreach (Person p in l1)
            {
                yield return p;
            }
            //return l1.AsReadOnly(); 
        }
    }  
    class Program
    {
        static void Main(string[] args)
        {
            List1 list1Instance = new List1();
            List<Person> p = new List<Person>(list1Instance.Get());           
            UpdatePersons(p);
            bool sameFirstName = (list1Instance.l1[0].FirstName == p[0].FirstName);
        }
        private static void UpdatePersons(List<Person> list)
        {
            list[0].FirstName = "uf1";
        }
    }
Can we change this behavior with out changing the return type of List1.Get()?
Thanks