Python

Ссылки и указатели

Обьясните разницу между ссылкой и указателем. Как я понял, разница какая-то есть но вот в чем она заключается, что по существу являют собой ссылки и указатели. Например есть выражение а = 10. В нем а - у ссылка на обьект 10. Можно ли считать а указателем? Зарание извиняюсь за размытость вопроса, уж больно тема сложная.
Вопрос размещён в теме Python. Разве в Python есть указатели?

Отличия такие.
1. Значение указателя может быть изменено произвольным образом. Например, он может быть сдвинут на размер одного элемента данных. Это используется для обработки массивов и строк. Поэтому указатель может даже выйти за границу выделенной памяти (что скорее всего является следствием ошибки). Ссылка может ссылаться только на заданный объект.
2. Указатель содержит адрес. Ссылка может быть реализована как-то иначе. В С++ ссылка тоже содержит адрес. В других языках программисту не надо знать, как устроена ссылка. Программисту важно, что ссылка работает как положено, а не как она устроена внутри. Скорее всего, ссылка содержит адрес. Ссылку можно представлять себе как указатель, но её реализация может быть другой.
Указатель всегда можно преобразовать в число и наоборот (поскольку адрес - это число). Для ссылок это невозможно. Или можно преобразовать ссылку в число (если есть такая возможность в языке), но не наоборот.
АЕ
Афонасий Елисеев
36 282
Лучший ответ
Шабан Шабанов Ну, там написано, что ссылки в питоне реализованы в виде указателей, как то так.
Если смотреть на все это упрощенно, то получается следующее:
Указатель - это просто тупо спец. тип данных. Вот есть, например если говорить о си, тип данных int, float и т. п, также есть и тип данных указатель на int, указатель на float ...
Также, как и создать переменную типа инт, можно создать и переменную типа указатель на инт. Это будет просто переменная.
Также, как и сложить инт с числом, можно сложить и указатель с числом, но тут уже в ход пойдет адресная арифметика.
В сухом остатке, указатель - просто тип данных и можно создавать переменные этого типа.
Теперь ссылка. Ссылку проще всего представить как псевдоним. То есть есть какой-то объект в памяти и ссылка - просто псевдоним для обращения к этому объекту.
Возвращаясь к питону и к а = 10. Если снова упрощать, то здесь происходит следующее: в памяти создается объект типа инт (утиная типизация) со значением 10. Затем создаем псевдоним "a" и говорим, что он ссылается на этот объект в памяти.
Тут, кстати, стоит упомянуть сборку мусора. Если на объект в памяти не ведет ни одна ссылка (а они там подсчитывают количество ссылок), то при вызове сборщика мусора такой объект будет удален и его память освобождена.