
list와 list[:]?
nums라는 리스트 변수가 있다고 해보자.
nums의 값을 변경할때 아래와 같은 2가지 방법을 수행할 수 있음
nums[:]... 와 nums=...
차이점
nums[:]는 얕은 복사(Shallow Copy)를 수행하고,
nums = ...는 참조 변경을 수행함.
상세 비교
- nums[:]의 특징
- 원본 리스트의 메모리 주소를 유지
- 리스트의 내용을 직접 수정
- 함수 내부에서 호출자의 리스트를 변경 가능
- 모든 요소를 새로운 리스트로 복사
- nums = ...의 특징
- 새로운 리스트 객체 생성
- 원본 리스트의 참조를 완전히 변경
- 함수 외부의 원본 리스트에 영향을 주지 않음
코드 예시
def modify_list(nums):
# nums[:] 방식 - 원본 리스트 직접 수정
nums[:] = [5, 6, 7]
# nums = 방식 - 새 객체 생성 (원본에 영향 없음)
nums = [1, 2, 3]
original = [1, 2, 3, 4]
modify_list(original)
print(original) # [5, 6, 7]
주요 용어
- 얕은 복사(Shallow Copy): 객체의 참조만 복사 (가르키는 주소)
- 깊은 복사(Deep Copy): 객체의 모든 내부 요소까지 완전히 복사
- 참조(Reference): 메모리상 객체를 가리키는 포인터
실용적 팁
- 함수 내에서 리스트를 직접 수정하려면 nums[:] 사용
- 새로운 리스트를 만들고 싶다면 nums = ... 사용
- 복잡한 중첩 리스트의 경우 copy.deepcopy()를 쓸수도 있음