Основное различие между первыми двумя случаями и следующими двумя случаями в приведенном выше ответе должно заключаться в том, что список изменчив. Для случаев, таких как a = 1, указатель указывает на то место, где находится 1, а когда вы говорите, что a = 2, указатель смещается.
Для случая изменяемых объектов выделяется место в памяти, и при использовании таких методов, как append, в самой ячейке памяти происходят изменения, поэтому значение изменяемых ссылок изменяется глобально.
Теперь большой вопрос в том, как функция знает, что переменная, которую мы модифицируем, является глобальной или локальной, потому что кажется, что мы можем изменить глобальную переменную, если она изменяемая, и не можем, если она не изменяемая (функция также делает не распознавать это как глобальную переменную)