2020년 5월 29일 금요일

파이썬 list 멤버들의 복사 - copy

파이썬 list 멤버를 다른 list로 복사하는 방법은 아래 코드와 같이 할 수 있을 것인데요.

list1 = [1, 2, 3, 4, 5]
list2 = list1

print (list1)
print (list2)


그러면 아래와 같이 결과가 나옵니다.

list1 :  [1, 2, 3, 4, 5]
list2 :  [1, 2, 3, 4, 5]


그런데 아래 코드를 실행하면

list2[2] = 0

print ("list1 : ", list1)


아래와 같이 나옵니다.

list1 :  [1, 2, 0, 4, 5]

분명 list2의 3번째 멤버의 값을 변경했는데, list1의 3번째 멤버의 값도 같이 바뀝니다.

이유는 list를 저장하는 변수는 실제 값을 가지고 있는게 아니라 list 구조체에 대한 포인터 (주소)를 가지고 있기 때문에 list1이나 list2 모두 같은 구조체의 주소를 가지고 있으므로 list2 구조체 멤버를 변경하면 list1 멤버도 같이 변경되기 때문이죠.

그렇다면 list1과 list2의 주소를 달리하면서 멤버들을 복사하는 방법이 있죠. 바로 copy를 이용하면 되는데요.

다시 코드를 아래와 같이 변경했습니다.

list1 = [1, 2, 3, 4, 5]
list2 = list1.copy()

print ("list1 : ", list1)
print ("list2 : ", list2)

print ("\n")

list2[2] = 0

print ("list1 : ", list1)
print ("list2 : ", list2)


그러면 아래와 같이 완벽히 다른 주소를 가진 list2에 list1의 멤버가 복사되었음을 볼 수 있습니다.

list1 :  [1, 2, 3, 4, 5]
list2 :  [1, 2, 3, 4, 5]

list1 :  [1, 2, 3, 4, 5]
list2 :  [1, 2, 0, 4, 5]

댓글 없음:

댓글 쓰기