파이썬은 매우 간단하다. 문법도 심플하고 내부적으로 어떻게 동작하는지 파악하지 않아도 충분히 프로그램을 작성할 수 있다. 개인적으로 파이썬이 수도코드같은 느낌의 언어여서 좋아한다. (ㅎㅎ)

하지만 파이썬을 이용하여 리스트를 다루다보면 복제한 리스트의 값이 예상치못하게 변경된다던가 하는 등 내 예상과는 다르게 동작하는 경우가 발생한다. 값이 동일한 리스트를 복제하는 방법을 정리하기전에, 일단 파이썬이 주소값을 할당하는 방식에 대해 파헤쳐보았다.

Python 의 주소값 할당 방식

다른 언어와 동일하게 변수에 값을 할당하면 해당 값이 저장된 주소의 값이 저장된다.

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])))  # 값이 추가되어도 다음 주소값에 위치함

리스트의 요소가 일반 숫자들이 저장된 위치를 가리키는 듯하여 내가 추측한 모든 것들이 무너짐..ㅠㅠㅠ

→ 파이썬 알고리즘 테스트 책 참고하여 내용 더 파악하기