반응형
결론
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
반응형
'프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
얕은 복사와 깊은 복사가 이루어지는 경우 비교 (0) | 2024.10.21 |
---|---|
[Numpy] reshape() 매개변수, 튜플 차이 (1) | 2024.10.20 |
[Pandas] 숫자 슬라이싱과 문자(라벨) 슬라이싱의 차이 (0) | 2024.09.22 |
[Pandas] isna()와 isnull()의 차이 (0) | 2024.09.22 |
[Pandas] and와 & 차이 (0) | 2024.09.22 |