Engineering Note

[Python] 리스트의 복사 본문

Programming Language/Python

[Python] 리스트의 복사

Software Engineer Kim 2021. 9. 25. 11:14

리스트를 일반 변수 처럼 복사하면 새로운 변수에 값을 전달하는 것이 아니라 같은 객체를 가리키는 두가지 변수가 생성되는 것이다. 그래서 복사한 곳의 리스트를 변경해도 기존 리스트도 변경되는 것이다. 사실은 두 변수가 같은 메모리를 가리키고 있기 때문이다.

list1 = [1,2,3]
list2 = list1
print("list1 id:",id(list1))
print("list2 id:",id(list2))

list1[0] = 10
print("list1",list1)
print("list1",list2)

출력 결과

메모리 이미지

리스트의 값이 리스트로 있을 때도 마찬가지도 이다.

q = [1,2,[3,4]]
root = [1010]
q[2] = root
q[2].append(3)
root.append(3333)
print(root) # 1010,3,3333
print(q[2]) # 1010,3 3333

print("q[2] id:", id(q[2]))

출력 결과

q[2]에 root 리스트를 복사하게 되면 q[2]는 root가 가리키는 객체의 주소가 저장된다. 그리고 q[2]의 값을 변경하더라도 root이 변경되고, root의 값을 변경하더라고 q[2]의 값도 변경된다.

그 이유는 q[2]와 root가 사실 같은 메모리 주소를 가리키고 있기 때문이다.

q = [1,2,[3,4]]
root = [1010]

q[2] = root.copy() 
q[2].append(3)
root.append(3333)
print(q[2]) #1010,3
print(root) # 1010, 3333
print("q[2] id:", id(q[2]))
print("root id:", id(root))

리스트를 복사할 때 새로운 같은 메모리 주소를 가리키는 것이 아니라 새로운 메모리공간을 생성해 값만 복사하고 싶다면 .copy()함수를 사용하면 된다. 그러면 두 리스트는 전혀 다른 리스트가 된다.

 

출력결과

 

Comments