python List 메모리에 대해 알아 보겠습니다.
list_a = [1,2,3,4]
list_b = list_a
print("list_a :", list_a)
print("list_b :", list_b)
print("list_a 메모리 :", id(list_a))
print("list_b 메모리 :", id(list_b))
"""
결과
list_a : [1, 2, 3, 4]
list_b : [1, 2, 3, 4]
list_a 메모리 : 1305532916296
list_b 메모리 : 1305532916296
"""
list_a의 리스트를 list_b에 대입연산자( = )를 사용하게 되면,
list_b에 값이 저장되는 것이 아니라, list_a의 메모리 주소를 저장하게 되어 list_a와 list_b가 서로 메모리 주소를
공유합니다.
만약, list_a에 변수를 추가하게 되면 어떻게 될까요?
list_a = [1,2,3,4]
list_b = list_a
#list_a에 5를 추가
list_a.append(5)
print("list_a :", list_a)
print("list_b :", list_b)
print("list_a 메모리 :", id(list_a))
print("list_b 메모리 :", id(list_b))
"""
결과
list_a : [1, 2, 3, 4, 5]
list_b : [1, 2, 3, 4, 5]
list_a 메모리 : 1866016776776
list_b 메모리 : 1866016776776
"""
결과는 list_a에 5가 추가된다면, list_b에도 5가 추가됩니다.
사실상 List명만 다를 뿐, 메모리를 서로 공유하기 때문에 같은 List로 볼 수 있습니다.
그렇다면, list_a와 list_b가 서로 다른 주소를 가지게 하려면 어떻게 해야할까요?
list_a = [1,2,3,4]
# .copy를 사용하여 변수 저장
list_b = list_a.copy()
#list_a에 5를 추가
list_a.append(5)
print("list_a :", list_a)
print("list_b :", list_b)
print("list_a 메모리 :", id(list_a))
print("list_b 메모리 :", id(list_b))
"""
결과
list_a : [1, 2, 3, 4, 5]
list_b : [1, 2, 3, 4]
list_a 메모리 : 2337630282312
list_b 메모리 : 2337630282376
"""
copy를 사용하면 메모리의 주소가 아닌, List안의 값들이 저장됩니다.
list_a와 list_b의 메모리 주소가 다름을 알 수 있습니다.
서로 메모리의 주소가 다르기 때문에 서로 다른 변수가 됩니다.
728x90
반응형
'🐍 Python > Basic' 카테고리의 다른 글
[파이썬] 자료구조 : 재귀함수 & 큐(Queue) & FIFO구조 (2) | 2020.05.02 |
---|---|
[파이썬 기본] Low Pass Filter(저역통과필터), High Pass Filter(고역통과필터), Band Pass Filter(대역통과필터) 모듈화 & 라이브러리화시키기 (4) | 2020.04.21 |
[파이썬] 자료구조 : 재귀함수 & 스택구조 & LIFO구조 (0) | 2020.03.21 |
[파이썬] 자료구조 : 버블 정렬 (0) | 2020.03.20 |
[python] List, Dict 를 활용한 면접 문제 연습하기 (0) | 2020.03.17 |