Я делал код, и переменные стали вести себя странно и были привязаны к вещам, которые, как я думал, не должны были.Итак, я решил свести ситуацию к минимальной сложности, чтобы решить мои сомнения, и вот что произошло:
Следующий код:
a = [2]
def changeA(c):
d = c
d[0] = 10
return True
changeA(a)
print(a)
печатает '[10]'.Это не имеет смысла для меня, так как я никогда не назначал список «а», чтобы быть чем-либо после первого назначения.Внутри функции changeA локальная переменная d назначена входом функции, , и мне кажется, что это назначение происходит в обоих направлениях, и даже меняется "снаружи" .Если так, то почему?Если нет, то почему это происходит?
Я также заметил, что код
a = [2]
def changeA(c):
d = list(c)
d[0] = 10
return True
changeA(a)
print(a)
ведет себя нормально (то есть, как я ожидал).
РЕДАКТИРОВАТЬ:Этот вопрос считается дубликатом этого .Я не думаю, что это правда, так как здесь также важно, чтобы локальный характер процедур внутри функции нарушался.