파이썬 리스트 에일리어싱

조회수 1382회

이미지

이 코드는 리스트를 바꾸는데

이미지

이 코드는 리스트를 바꾸지 않는 이유가 뭔가요? 둘의 차이점을 모르겠습니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 두 번째의 경우 letters라는 값이 delete_head 함수에 들어가서, t라는 곳으로 받아왔고(대략 t=letters) t라는 이름으로 무언가를 처리합니다. 그 내부에서 t의 값을 변경했지만 delete_head가 끝났을 때 letters가 조작된 것은 하나도 없죠.

    첫 번째의 경우에도 tletters를 담아놨기 때문에 tletters는 같은 array object에 연결되어 있습니다. 그래서 t가 가리키는 array object에서 어떤 인덱스에 있는 값을 지워라라는 del 함수를 적용하면 결과적으로 letterst에서 지운것과 동일하게 지워져 있는 것이죠. 왜냐하면 연결되어 있으니까.

    실제로 delete_head의 코드에서 del t[0]를 실행하기 전에 t의 값을 다르게 변경 하는 코드를 적용해 놓고 del을 실행하면 연결이 끊어져 있으므로 letters는 영향을 받지 않습니다.

    다른 유명한 프로그래밍 언어에서 접근하는 call by value / call by reference 에 대해 공부하시고, 파이썬에서만(?) 이야기 하는 call by object reference도 알아보시면 도움이 될 거에요. 제가 설명드린 내용은 사실 약간의 문제점들이 있거든요.

    call by object reference에 대해 몇몇 분들이 정리해놓으신 것 링크 달아드릴게요
    https://item4.github.io/2015-07-18/Some-Ambiguousness-in-Python-Tutorial-Call-by-What/
    http://hyunalee.tistory.com/43

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 설명을 해보려고 했으나 오히려 더 헷깔릴 수 있겠다 싶네요. 혹시 제 말이 도움이 안된다면 걸어드린 링크부터 찬찬히 읽어보시길 바래요. 알 수 없는 사용자 2017.7.11 00:52

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)