파이썬 id 함수
데이터가 저장되어 있는 주소를 알아내는 방법을 볼게요.
id 함수를 이용하면 저장한 데이터의 메모리 주소를 정수로 표현한 값을 알아낼 수 있습니다. 여러 타입의 데이터를 저장하고 id 함수를 써서 메모리 주소를 출력시켜보겠습니다.
# 여러 데이터를 저장한다
list1 = [1, 2]
int1 = 0
float1 = 3.14
set1 = set()
tuple1 = (2, 3)
# 저장한 데이터의 메모리 저장 위치를 받아온다
print(id(list1))
print(id(int1))
print(id(float1))
print(id(set1))
print(id(tuple1))
140237662138184
4450309504
140237661913472
140237664406888
140237662993992
데이터가 각각 다른 메모리 주소에 저장돼 있군요.
주소는 코드를 돌릴 때마다 다르게 나오니까 여러분 컴퓨터에 다르게 출력되어도 놀라지 마세요!
같은 주소에 저장돼 있는 데이터
좀 당연한 말같이 들리실 수도 있는데요. 똑같은 주소에 저장돼 있는 데이터는 똑같은 데이터입니다.
# 리스트를 정의한다
list1 = [1, 2]
list3 = [1, 2, 3]
# Aliasing을 통해 list1과 list2를 같게 한다
list2 = list1
# 두 데이터의 메모리를 출력한다
print(id(list1)) # 140657629409160
print(id(list2)) # 140657629409160
print(id(list3)) # 140657629409096
위 코드를 살펴봅시다. 세 변수 list1, list2, list3를 만들었습니다.
list1은 정수 1, 2를, 그리고 list3은 1, 2, 3을 담고 있는 리스트입니다.
그리고 list2에 list1를 지정했습니다. 메모리에서 만든 하나의 같은 리스트를 list1, list2라는 두 개의 다른 변수가 가리키고 있는 거죠. 이렇게 여러 변수가 같은 메모리를 가리키는 것을 Aliasing이라고 합니다.
id 함수를 써서 list1과 list2의 메모리 주소를 출력해 보면 같다고 나오죠? list3는 다른 주소에 저장되어 있습니다. list1과 list2는 서로 같은 리스트를 가리키고 있기 때문에 똑같은 메모리가 출력되고, list3는 전혀 다른 리스트를 가리키고 있기 때문에 다른 메모리가 출력되는 거죠.
'Algorithm > 자료구조' 카테고리의 다른 글
[링크드 리스트] 링크드 리스트 __str__ 메소드 (0) | 2023.07.31 |
---|---|
[배열] 동적 배열 크기 줄이기 (0) | 2023.07.31 |
[배열] 동적 배열 삭제 연산 (0) | 2023.07.31 |
[배열] 분할 상환 분석 적용 (0) | 2023.07.28 |
[배열] 파이썬 리스트(동적 배열)의 비밀 (0) | 2023.07.28 |