파이썬은 매우 간단하다. 문법도 심플하고 내부적으로 어떻게 동작하는지 파악하지 않아도 충분히 프로그램을 작성할 수 있다. 개인적으로 파이썬이 수도코드같은 느낌의 언어여서 좋아한다. (ㅎㅎ)
하지만 파이썬을 이용하여 리스트를 다루다보면 복제한 리스트의 값이 예상치못하게 변경된다던가 하는 등 내 예상과는 다르게 동작하는 경우가 발생한다. 값이 동일한 리스트를 복제하는 방법을 정리하기전에, 일단 파이썬이 주소값을 할당하는 방식에 대해 파헤쳐보았다.
다른 언어와 동일하게 변수에 값을 할당하면 해당 값이 저장된 주소의 값이 저장된다.
print(id("Test")) # 140623002367024
a = "Test"
print(id("Test")) # 140623002367024
print(id(a)) # 140623002367024
id() 함수는 변수가 가리키고 있는 객체의 주소 값을 리턴하는 파이썬 내장 함수이다. 일반 문자열은 더 이상 참조하는 값이 없으므로 문자열이 저장된 메모리의 주소가 출력되는듯 하다…
파이썬 자체의 주소값 할당 방식을 모두 알아보고 싶지만… 그러기에는 양이 너무 방대하여 리스트만을 기준으로 두었다.
리스트
print("0. python 의 list 와 요소의 주소값")
print("origin : " + str(id(origin)))
print("origin[0] 주소 : " + str(id(origin[0])) + " / origin[1] 주소 : " + str(id(origin[1])) + " / origin[2] 주소 : " + str(id(origin[2])))
print("0번째 요소와 1번째 요소 주소의 차이 : " + str(id(origin[1]) - id(origin[0])))
print("1번째 요소와 2번째 요소 주소의 차이 : " + str(id(origin[2]) - id(origin[1])))
origin.append(4)
print("2번째 요소와 3번째 요소 주소의 차이 : " + str(id(origin[3]) - id(origin[2]))) # 값이 추가되어도 다음 주소값에 위치함
리스트의 요소가 일반 숫자들이 저장된 위치를 가리키는 듯하여 내가 추측한 모든 것들이 무너짐..ㅠㅠㅠ
→ 파이썬 알고리즘 테스트 책 참고하여 내용 더 파악하기