반응형

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
반응형

+ Recent posts