변수를 리스트에 넣었는데 원래 변수와 리스트로 들어간 변수의 값이 연동이 안됩니다
조회수 471회
a = "에이"
b = "비"
c = "씨"
d = "디"
abcd = [a, b, c, d]
d
의 값을 바꿔도 abcd
변수의 d
값이 안바뀌는데 왜 그런거죠? 반대의 경우도 똑같은거 같아요
d
와 abcd[3]
이 왜 따로 노는지 이해가 안갑니다. 두 변수의 이름이 같은데 다를 수가 있나요?
왜 서로 연동이 안되지 알려주시면 감사하겠습니다.
그리고 지금은 코딩도장 보고 공부하는데 더 좋은 사이트나 책 있나요? 코딩도장에는 이거에 대한 얘기는 없는거 같아요. 제가 발견을 못하는건지.
2 답변
-
두 가지 이유때문에 말하신 '연동'을 할 수 없습니다.
첫째는 할당을 리터럴 상수로 하셨기 때문이고, 둘째는 d 값을 바꾸신게 아니라 d 변수에 다른 값을 할당하신 것이기 때문입니다.
a = "에이" b = "비" c = "씨" d = "디" #abcd = [a, b, c, d] abcd = ["에이", "비", "씨", "디"]
작성하신 이 코드는 위와 동일합니다. d값을 바꾸셨다고 하신 건 d 변수에 다른 값을 할당한 것이지 d의 값(객체) 자체의 값을 바꾼 것이 아닙니다.
아래는 참고용 예시입니다.
a = "에이" b = "비" c = "씨" d = ["디"] abcd = [a, b, c, d] #d는 리스트 객체를 전달받았습니다. #abcd = ["에이", "비", "씨", ["디"]] 이와 같으나 ["디"]는 d와 연결되어 있습니다. print(abcd) c = "씨씨" #위 경우 c 변수에 "씨씨"를 할당한 것이지 "씨"를 "씨씨"로 바꾼게 아닙니다. print(abcd) #따라서 변동이 없습니다. d[0] = "디디" #위 경우 d 변수가 가진 ["디"]객체의 0위치에 있는 "디"를 "디디"로 바꿨습니다.(할당하였습니다.) 따라서 ["디"] 객체 채로 가지고 있던 다른 변수(리스트)도 영향을 받게 됩니다. print(abcd) #객체가 반영이 되어 변경된 값인 '디디'로 표시됩니다.
[결과]
['에이', '비', '씨', ['디']] ['에이', '비', '씨', ['디']] ['에이', '비', '씨', ['디디']]
변수가 무엇을 참조하고 있는가에 대해 생각해보시기 바랍니다.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
>>> a='a' >>> b='b' >>> c='c' >>> d='d' >>> e=[a,b,c,d] >>> id(a) #2001198307120 >>> id(b) #2001198295536 >>> id(c) #2001197278640 >>> id(d) #2001197283632 >>> id(e) #2001199954952 >>> id(e[3]) #2001197283632 (d) 이외 다른것도 b,c,d를 가리킴 >>> d=['d'] >>> id(d) #2001198591240 >>> id(e[3]) #2001197283632 일전의 d 를 갖고있음. >>> e=[a,b,c,d] #재지정 >>> id(a) #2001198307120 >>> id(b) #2001198295536 >>> id(c) #2001197278640 >>> id(d) #2001198591240(변경됨) >>> id(d[0]) #2001197283632 >>> d[0]='b' >>> id(d) #2001198591240(동일함) >>> id(d[0]) #2001198295536(변경됨)
댓글 입력