Base Line/python 기초 코드

리스트 딥카피

ylab 2023. 8. 24. 17:13

이썬 리스트에서 a=[] 이고 tmp=[1,2,3] 라고 할때 그냥 a.append(tmp)랑 a.append(tmp[:]) 라고 한다면

 

  1. a.append(tmp): 이 경우에는 리스트 a에 tmp 리스트 객체를 추가하는 것입니다. 즉, a 리스트 안에는 하나의 요소로서 tmp 리스트 전체가 들어가게 됩니다. 이후 tmp 리스트가 변경되면 a 리스트에 추가된 요소도 함께 변경될 수 있습니다. 이는 a 리스트가 tmp 리스트를 참조하고 있는 것입니다. 따라서 a[0] is tmp가 True일 것입니다.
  2. a.append(tmp[:]): 이 경우에는 tmp 리스트의 내용을 슬라이싱하여 새로운 리스트 객체를 생성한 후, 이를 a 리스트에 추가합니다. 이렇게 하면 a 리스트와 tmp 리스트는 완전히 별개의 객체가 되며, tmp 리스트의 변경이 a 리스트에 영향을 미치지 않습니다. 즉, a[0]은 tmp 리스트와 동일한 내용을 가진 새로운 리스트 객체입니다. 따라서 a[0] is tmp가 False일 것입니다.

요약하자면, a.append(tmp)는 tmp 리스트의 참조를 추가하는 것이며, a.append(tmp[:])는 tmp 리스트의 내용을 복사하여 새로운 리스트를 추가하는 것입니다.