[python] list와 list[:], 리스트 대입의 미묘한 차이

insung·2025년 1월 9일
0

알고리즘

목록 보기
1/20

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()를 쓸수도 있음
profile
안녕하세요 프론트엔드 관련 포스팅을 주로 하고 있습니다

0개의 댓글