20. 2 리스트의 할당과 복사
이번에는 리스트의 할당과 복사에 대해서 알아보겠습니다. 할당과 복사는 비슷한 것 같지만 큰 차이점이 있습니다. 먼저 다음과 같이 리스트를 만든 뒤 다른 변수에 할당하고, 요소를 변경합니다.
>>> a = [0, 0, 0, 0, 0] >>> b = a >>> b[2] = 99 >>> a [0, 0, 99, 0, 0] >>> b [0, 0, 99, 0, 0]
b = a와 같이 리스트를 다른 변수에 할당하면 리스트는 두 개가 될 것 같지만 실제로는 리스트가 한 개입니다. 그래서 b[2] = 99와 같이 리스트 b의 값을 변경하면 리스트 a와 b에 모두 반영됩니다.
is 연산자로 비교를 해보면 True가 나오므로 두 객체는 같습니다. 물론 리스트 안에 들어있는 요소도 같으므로 ==로 비교하면 True가 나옵니다.
>>> a = [0, 0, 0, 0, 0] >>> b = a >>> a is b True >>> a == b True
여기서 리스트를 완전히 두 개로 만들려면 copy()로 요소를 모두 복사해야 합니다.
>>> a = [0, 0, 0, 0, 0] >>> b = a.copy() >>> b[2] = 99 >>> a [0, 0, 0, 0, 0] >>> b [0, 0, 99, 0, 0]
b = a.copy()와 같이 copy를 사용한 뒤 b에 할당해주면 리스트 a의 요소가 모두 b에 복사됩니다. 이제 리스트 a와 b는 별개이므로 값을 변경해도 다른 리스트에 영향을 미치지 않습니다.
is 연산자로 비교해보면 False가 나오므로 두 객체가 다르다는 것을 알 수 있습니다. 물론 객체는 다르지만 리스트 안에 들어있는 요소는 같으므로 ==로 비교하면 True가 나옵니다.
>>> a = [0, 0, 0, 0, 0] >>> b = a.copy() >>> a is b False >>> a == b True