Передача по ссылке означает, что когда вы передаете переменную в функцию, вы не передаете переменную сама , вы передаете указатель в переменную, которая является скопировано снаружи внутрь функции.В примере 1 вы передаете list
в функцию, которая является указателем на список, содержащий элементы [3]
.Но затем, сразу после этого, вы берете эту переменную, содержащую указатель на список, и помещаете в нее новый указатель, на новый список, содержащий элементы [0, 1, 2]
.Обратите внимание, что вы не изменили список, с которого начинали - вы изменили то, на что ссылалась переменная, на которую ссылается .И когда вы возвращаетесь из функции, переменная, которую вы передали в функцию (все еще указатель на первый список), не изменилась - она все еще указывает на список, который содержит элементы [3]
.
В примере 2 вы передаете A
в xyz()
.В то время как в примере 1 вы сделали что-то вроде
A = something_else
, вы делаете
A[i] = something_else
Это совершенно другая операция - вместоизменяя то, на что указывает переменная, содержащая список, вы изменяете сам список - изменяя один из его элементов.Вместо того, чтобы A
указывать на что-то другое, вы изменяете значение, на которое указывает A
, путем разыменования его.