Вы создаете объект с именем o.Затем вы помещаете его в список, что означает, что в списке хранится ссылка на объект, который в данный момент хранится в o.Результат печати в цикле является основанием, потому что есть только один объект, у которого «база» хранится в b.
Затем вы изменяете o, устанавливая o в b как «новый».Поскольку o и объект, сохраненный в списке, одинаковы, изменение o также приводит к изменению объекта, сохраненного в списке.Это те же самые объекты.
Затем вы устанавливаете o в ноль.Это означает, что o теперь указывает на ноль, тогда как объект, сохраненный в списке, указывает на объект, изначально сохраненный в o.
Первоначально o указывает на A, вы добавляете o в список, так что список знает об Aне о.Если затем вы измените A, используя o, вы можете получить доступ к этому изменению, используя путь o к A и путь списка A. Затем вы задаете o, чтобы знать о B, список все еще знает об A, но ничего о B, потому что список хранитA, а не B. o Только был передатчик, чтобы получить знания об A в списке.