4

Я видел в нескольких местах, включая документацию Python, которую Python использует для передачи по семантике «присваивания». Исходя из фона Java, где распространенная ошибка, заключающаяся в том, что «Java передает примитивы по значению и объекты по ссылке», является результатом того, что ссылки на объекты переданы по значению, я не могу не задаться вопросом, действительно ли Python делает то же самое вещь.Передача параметров Python и Java

Для меня концепции передачи объектных ссылок по значению и передачи по назначению кажутся одинаковыми. Использует ли Python термин «пропущенное присвоение» попытку смягчить проблему наличия ошибочных утверждений, таких как описанные выше? Если да, то справедливо ли говорить, что передача параметров работает аналогичным образом на двух языках?

Редактировать: Я не думаю, что этот вопрос является дубликатом. Здесь я спрашиваю о терминологии, используемой Python, с прямой ссылкой на то, как Java что-то делает. Другой вопрос заключается в том, является ли язык передачей по значению или передачей по ссылке. Я знаю, что передача по заданию - это номенклатура, используемая здесь, но мое утверждение, которое, как представляется, поддерживается принятым ответом, заключается в том, что это действительно не отличается от того, как Java делает вещи; это просто другое имя.

+0

Да, это справедливо сказать. Но имейте в виду, что все это объект в Python, нет «примитивов». Но вы правы в том, что все передается по значению. Передача по ссылке - это концепция, встречающаяся в таких языках, как C/C++. @Luiggi ОП сказал, что это была * распространенная ошибка * сказать такое. – Shashank

+2

@LuiggiMendoza ', где ** распространенная ошибка в высказывании ** «Java передает примитивы по значению, а объекты по ссылке» –

ответ

8

Да Python, похоже, эквивалентен Java в этом отношении. От http://learnpython.pbworks.com/w/page/15956522/Assignment:

Но вы должны быть осторожны, о том, что подразумевается под «изменениями параметров». Присвоение нового значения имени параметра (внутри функции параметр является только локальной переменной) не изменяет исходный объект - он только переустанавливает локальную переменную на новый объект.

Итак, Python передает «ссылки на объекты» по значению.

+1

Просто для пояснения: Python фактически передает параметры по ссылке на него. Присвоение имени формального аргумента перезапишет предыдущую ссылку. Попробуйте 'l.append (« Hello »)' внутри функции 'f (l)'. Исходный объект будет изменен. В этом аспекте Python больше похож на ссылки на C++. – Olaf

+2

@Olaf Это именно то, что я хочу сказать, и Java ведет себя одинаково. Объект ссылки может быть изменен, но переназначение ссылки в функции/методе не влияет на ссылку вызывающего. – GriffeyDog

+0

Да, я просто хотел прояснить это, потому что сначала прочитал ваш ответ по-другому, пока я немного не рассказал о котировках. Просто не был уверен, правильно ли я правильно понял ваш ответ. – Olaf

Смежные вопросы