파이썬 리스트 에일리어싱
조회수 1382회
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
두 번째의 경우
letters
라는 값이delete_head
함수에 들어가서,t
라는 곳으로 받아왔고(대략t=letters
)t
라는 이름으로 무언가를 처리합니다. 그 내부에서t
의 값을 변경했지만delete_head
가 끝났을 때letters
가 조작된 것은 하나도 없죠.첫 번째의 경우에도
t
에letters
를 담아놨기 때문에t
와letters
는 같은 array object에 연결되어 있습니다. 그래서t
가 가리키는 array object에서 어떤 인덱스에 있는 값을 지워라라는del
함수를 적용하면 결과적으로letters
도t
에서 지운것과 동일하게 지워져 있는 것이죠. 왜냐하면 연결되어 있으니까.실제로
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
-
댓글 입력