나는 다음과 같은 코드를 가지고있는 변수 할당과 기능 :목록, 파이썬
def proc2(p):
p=p+[1]
y=[2,5]
proc2(y)
print(y)
z=[2,5]
z=z+[1]
print(z)
코드의 출력은이 :
[2, 5]
[2, 5, 1]
나는 y는하지 입니다 [2,5,1]
에을 수정 한 것으로 알고 있습니다. 그러나 y는 이고 새로운 목록은입니다. [2,5,1]
입니다. 맞습니까? 그런데 y가 원래 값을 계속 참조하는 이유는 무엇입니까? z의 값이 변경되면 y가 아닌 이유는 무엇입니까?
P. 나는 방금 이것과 거의 같은 question을 물었다. 이 질문은 다른 질문의 사본으로 표시되었습니다. 그러나, 나는 그들이 조금 다르다고 생각한다. 그래서 내 질문을 다시 게시하고 있습니다. 나는 내가 기능에 관해 무엇인가 놓쳤음에 틀림 없었다라고 생각한다.
()'의'p'리스트 p'는 긴리스트에 재배치되는 '다음 첨부된다. 언급했듯이 이것은 여전히 짧은 목록을 가리키는'y'에는 영향을 미치지 않습니다. 그러나 두 번째 예제에서 'z'는 실제로 추가 목록을 가리 키도록 다시 할당됩니다. – Phylogenesis
'z'에 실제로 할당 된 원래 목록의 값은 * 변경되지 않았습니다. 더 이상 참조하지 않는 것입니다. 예를 들면 'old_z = z' * before *'z + = 1', 그리고 나서'old_z'를 출력하면 알 수 있습니다. 행동에는 차이가 없습니다. – jonrsharpe
'p = p + [1]'은 이전에 참조했던리스트를 수정하지 않습니다. _variable_'p'를 수정하여 새로운리스트를 참조합니다. _old_ 목록을 계속 참조하는 다른 변수는 영향을받지 않습니다. – khelwood