저번 문제를 풀었을 때 메모리 주소 값이 같게 나오는게 몇개가 보여서 질문을 했는데 답을 받아서 정리를 하고자 한다.
import copy scores = [9, 8, 5, 7, 6, 10] scoresCopy = [] / for s in scores: scoresCopy.append(s) / print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}') / scoresCopy.extend(scores) print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}') / scoresCopy = scores.copy() print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}') / scoresCopy = scores[:] print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}')
id(scores): 4375024896 id(scoresCopy): 4375023104 <- append id(scores): 4375024896 id(scoresCopy): 4375023104 <- extend id(scores): 4375024896 id(scoresCopy): 4375024960 <- copy id(scores): 4375024896 id(scoresCopy): 4375023104 <- [:]
import copy scores = [9, 8, 5, 7, 6, 10] scoresCopy = [] / for s in scores: scoresCopy.append(s) / print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}') / scoresCopy.extend(scores) print(f'id(scores): {id(scores)}') print(f'id(scoresCopy): {id(scoresCopy)}') / scoresCopy2 = scores.copy() print(f'id(scores): {id(scores)}') print(f'id(scoresCopy2): {id(scoresCopy2)}') / scoresCopy3 = scores[:] print(f'id(scores): {id(scores)}') print(f'id(scoresCopy3): {id(scoresCopy3)}')
id(scores): 4338128256 id(scoresCopy): 4338128128 <- append id(scores): 4338128256 id(scoresCopy): 4338128128 <- extend id(scores): 4338128256 id(scoresCopy2): 4338128320 <- copy id(scores): 4338128256 id(scoresCopy3): 4338128512 <- [:]
사실 기존의 코드에서 크게 달라진 부분은 없다.
scoresCopy2
, scoresCopy3
등으로 변수명을 바꿔준게 끝이다.
그 이유는,
기존 코드에서는 내가 동일한 변수를 사용했기 때문에 기존의 객체가 사라지면서 해당 id값이 공석이 되고, 이 부분을 새롭게 생성한 객체가 사용하게 되면서 주소 값이 같아보이게 되는 현상이 일어난 것이다!!!!!!!
OMG!!!
프로그래밍의 세계는 알면 알 수록 끝이 없는 듯 하다.
오늘도 또 하나의 의구심이 풀렸다.