В питоне все идет по ссылке
В Python, весь является ссылкой и ссылки переходите по значению.
Если вы хотите использовать эти термины. Но эти условия усложняют понимание.
Гораздо проще: в Python переменная является именем для объекта. =
используется для изменения имени объекта. Левая часть может относиться к части существующего объекта, и в этом случае весь объект изменяется путем замены этой части. Это связано с тем, что объект, в свою очередь, на самом деле не содержит его частей, но вместо этого содержит больше имен, которые могут быть вызваны, чтобы начать ссылаться на разные вещи.
тогда, когда новый объект создан?
Объекты создаются при их создании (с использованием конструктора классов или в случае встроенных типов, имеющих литеральное представление, путем ввода литерала). Я не понимаю, как это относится к остальной части вашего вопроса.
m = m[1:] # m changes its reference to the new sliced list
Да, конечно. Теперь m
относится к результату оценки m[1:]
.
edits m but not d (I wanted to change d)
Да, конечно. Почему будет это изменение d
? Это была не какая-то магия, а просто результат оценки d['m']
. Точно одно и то же происходит на обеих линиях.
Давайте рассмотрим более простой пример.
m = 1
m = 2
ли это причиной 1
стать 2
? Нет, конечно нет. Целые числа неизменны. Но то же самое происходит: m
призван назвать одно, а затем назвать другое.
Или, еще один способ: если «ссылки» должны работать так, как вы ожидаете, строка m = m[1:]
будет рекурсивной. Вы ожидаете, что это означает «где-нибудь, что вы видите m
, относитесь к нему так, как если бы это означало m[1:]
». Ну, в таком случае, m[1:]
бы на самом деле означает m[1:][1:]
, который будет означать, m[1:][1:][1:]
и т.д.
Если вы визуальный ученик, [здесь] (http://people.csail.mit.edu/pgbovine/python /) хороший учебник – forivall
Чрезвычайно полезный комментарий Mr. @jordoex - Серьезно Удивительный! –