이번에는 리스트의 할당과 복사에 대해서 알아보자 이 둘은 비슷한 것 같지만 큰 차이점이 존재한다. 먼저 다음 코드를 보자
>>> a = [0, 0, 0, 0, 0]
>>> b = a
리스트를 만든 다음에 다른 변수에 할당하였다. 이렇게 다른 변수에 할당하면 리스트는 두 개가 될 것 같지만 실제로 리스트는 한 개이다.
>>> a is b
True
a
와 b
를 is
연산자로 비교해보면 True
가 나온다. 즉, 변수 이름만 다를 뿐 두 변수는 같은 객체이다.
a
와 b
가 같으므로 b[2] = 99
과 같이 b
의 요소를 변경하면 리스트 a
, b
모두 반영이 된다.
>>> a = [0, 0, 0, 0, 0]
>>> b = a
>>> b[2] = 99
>>> a
[0, 0, 99, 0, 0]
>>> b
[0, 0, 99, 0, 0]
copy
)실제로 두 개의 리스트를 만들기 위해서는 copy
메서드를 사용해야한다.
>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()
위 코드와 같이 copy
를 한 뒤에 b
에 할당한다 그러면 b
리스트에는 a
리스트의 모든 요소가 복사된다.
그렇게 되면 요소는 같지만 서로 다른 리스트가 두 개 생긴다.
실제로 a
와 b
를 is
연산자로 비교해보면 False
가 나온다. 즉, 두 리스트는 다른 객체이다. 그러나 복사된 요소들은 모두 같으므로 ==
연산자로 비교하면 True
가 나온다.
>>> a is b
False
>>> a == b
True
이제 a
리스트와 b
리스트는 서로 별개이므로 한쪽의 값을 변경해도 다른 쪽에서는 어떠한 영향도 끼치지 않는다.
>>> b[2] = 99
>>> a
[0, 0, 0, 0, 0]
>>> b
[0, 0, 99, 0, 0]