[Python] 리스트 슬라이싱!
오늘은 리스트 슬라이싱 코드를 살펴보겠습니다
a = b
a = b[:]
a[:] = b
3개의 경우를 살펴보겠습니다.
먼저 첫번째 경우를 살펴보겠습니다.
a = b 를 하면 a는 b의 객체의 주소를 담게 되서 a 와 b는 같은 [4, 5, 6] 을 가지고 있습니다.
그래서 a나 b에 새로운걸 대입하는 것이 아닌 리스트를 변경하는 작업을 하면 둘 다 바뀌게 됩니다.
위의 코드를 실행하면
b.append(7)을 실행해도 a의 리스트에도 7이 추가되고 a[0]를 변경해도 b가 변경됩니다.
두번째로 a = b[:] 인 경우를 살펴보겠습니다.
를 실행하게 되면
b의 id는 그대로이지만 a의 id가 바뀌어 새로운 객체가 할당되었지만 b가 가르키고 있는 객체와는 다른 객체임을 알 수 있고 a와 b는 값만 같은 다른 객체임을 알 수 있습니다.
즉 a는 b의 주소가 아니라 b의 값들을 가져옵니다 그래서
를 실행하게 되면
a와 b는 각각 다른 객체임을 알 수 있습니다.
마지막으로 a[:] = b 를 살펴보면
a[:] = b 를 수행해도 a와 b의 id는 바뀌지 않습니다. 즉 a에 객체를 할당하는 것이 아니라 a의 원본 리스트의 값을 b의 값과 동일하게 변경한 것입니다.
를 수행하면
두 번째 a = b[:] 경우와 같아보입니다. 하지만 차이점은 a의 원본리스트의 주소가 변경되지 않는 것을 알 수 있습니다.
이것을 활용해서 문제를 풀 수도 있습니다.
leetcode.com/problems/reverse-string/
Reverse String - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
간단히 리스트를 뒤집는 것인데 in-place로 뒤집어야 하는 조건이 있습니다.
슬라이싱을 활용하여
s[:] = s[::-1] 을 하면 통과할 수 있습니다.
하지만 s = s[::-1] 은 새로운 객체를 대입하는 것이므로 Wrong Answer을 받게됩니다.