프로그래밍/파이썬(Python)

파이썬(리스트 등)의 copy()와 Numpy의 copy()

정정훈훈 2024. 10. 19. 21:35
반응형
결론
 
list1.copy()는 얕은 복사이고,
numpy에서 ndarray.copy()는 깊은 복사이다.
 
 
 
질문
numpy에서의 .copy()는 deepcopy인 거고, numpy가 아닌 일반적인 상황에서 list를 .copy()하면 얕은복사인 거야?
 

ChatGPT의 말:

ChatGPT

네, 맞습니다! 일반적인 리스트에서의 .copy()와 NumPy 배열에서의 .copy()는 서로 다른 동작을 합니다. 아래에서 각각의 경우를 자세히 설명하겠습니다.

1. 일반적인 리스트의 .copy()

  • 얕은 복사 (Shallow Copy):
    • Python의 기본 리스트에서 .copy() 메서드를 사용하면, 원본 리스트의 얕은 복사가 수행됩니다.
    • 즉, 새로운 리스트가 생성되지만, 그 리스트는 원본 리스트의 요소에 대한 참조를 유지합니다. 내부 요소가 변경되면 두 리스트 모두 영향을 받을 수 있습니다.

예시

python
코드 복사
list1 = [[1, 2, 3], [4, 5, 6]] data_copy = list1.copy() # 얕은 복사 list1[0][0] = 10 # 원본 리스트의 요소 변경 print("원본 리스트:", list1) # [[10, 2, 3], [4, 5, 6]] print("복사된 리스트:", data_copy) # [[10, 2, 3], [4, 5, 6]]

 
 
SMALL

2. NumPy 배열의 .copy()

  • 깊은 복사 (Deep Copy):
    • NumPy의 .copy() 메서드를 사용하면 깊은 복사가 수행됩니다. 원본 배열의 모든 요소가 복사되어 새로운 배열이 생성되고, 이 두 배열은 독립적인 상태가 됩니다.
    • 따라서, 원본 배열을 수정해도 복사본에는 영향을 주지 않습니다.

예시

python
코드 복사
import numpy as np array1 = np.array([[1, 2, 3], [4, 5, 6]]) data_copy = array1.copy() # 깊은 복사 array1[0, 0] = 10 # 원본 배열의 요소 변경 print("원본 배열:\n", array1) # [[10 2 3] [ 4 5 6]] print("복사된 배열:\n", data_copy) # [[1 2 3] [4 5 6]]

요약

  • 리스트에서의 .copy()는 얕은 복사로, 원본 리스트의 요소에 대한 참조를 유지합니다.
  • NumPy 배열에서의 .copy()는 깊은 복사로, 원본 배열과 복사된 배열이 독립적인 상태가 됩니다.

이러한 차이를 잘 이해하면, 데이터 복사 시 의도한 대로 동작하도록 코드를 작성할 수 있습니다.

728x90

 

반응형