Что Python рассматривает как ссылочные типы?

Я предполагал, что типы последовательностей в Python являются типами значений. Оказывается, они являются ссылочными типами (что означает, что значение переменной не будет скопировано при назначении новой переменной, но указано). Итак, теперь мне интересно, каковы типы значений в Python? То есть, какие типы в Python можно назначить новым переменным, не беспокоясь о том, что эта переменная была указана?

2 Solutions collect form web for “Что Python рассматривает как ссылочные типы?”

Все значения в Python являются ссылками. Что вам нужно беспокоиться, если тип изменен . Основные числовые и строковые типы, а также tuple и frozenset неизменяемы; имена, привязанные к объекту одного из этих типов, могут быть отскакиваны, а не мутированы.

 >>> t = 1, 2, 3 >>> t[1] = 42 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment 

Ответ выше правильный, но я возражаю против семантики «ссылки».

C-подобные языки обрабатывают переменные как фиксированные ведра, в которые помещаются значения. Когда вы вызываете функцию, создается новый набор ведер, и значения копируются в них. Иногда ведро является передачей по ссылке и фактически становится псевдонимом для ведра вызывающего.

Python, с другой стороны, рассматривает переменные как простые метки (имена) для значений (объектов). Когда вы вызываете функцию, создается новый набор меток и накладывается на те же объекты.

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

Возможно, Nitpicky, но терминология не приводит к путанице для программистов на C ++, которые, например, слышат пропуски Python по ссылкам и не понимают, как переназначить имена вызывающих.

Interesting Posts

PyQt4: перемещение контекстного меню в положение

Если подстановка этой строки не одобряется формированием SQL-запросов, как вы назначаете имя таблицы динамически?

Как я могу прочитать изображение из интернет-url в python cv2, scikit image и mahotas?

сортировать список словаря, беря целочисленное значение ключей, хранящихся в виде строки

как создать треугольник, заполненный полупрозрачным цветом подушкой python (fork PIL)

Неожиданное поведение списка в Python

Значения столбцов Pandas для столбцов?

развертывание тензорного потока при спусках, ошибки с использованием пушки и mod_wsgi

Функция () принимает ровно 2 аргумента (3 данных)

Python IndentationError: неожиданный отступ

Как получить десятичное значение при использовании оператора разделения в Python?

Преобразование Unicode в UTF-8 Python

Сравнение двух блоков данных pandas для различий

Пакет 4 байтовых целых числа в bytearray или массив

команды в tkinter, когда использовать лямбда и обратные вызовы

Python - лучший язык программирования в мире.