Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 리스트의 내부 동작 원리 쉽게 이해하기

이 튜토리얼에서는 Python 3.x 버전에서 리스트(list)가 내부적으로 어떻게 작동하는지 자세히 알아봅니다. 각 단계별로 Python 문장을 실행할 때 객체와 프레임이 어떻게 형성되는지도 함께 살펴보겠습니다.

리스트 초기화

리스트를 초기화한다는 것은 몇 가지 요소를 포함한 새로운 리스트를 생성하는 것을 의미합니다.

>>> lis=[1,2,3,4]

Python 리스트의 내부 동작 원리 쉽게 이해하기

위 그림과 같이 리스트 변수는 전역 프레임(global frame)에 선언되며, 이 변수는 하나의 리스트 객체를 참조하게 됩니다.

요소 추가(append)

이제 리스트에 요소를 추가하면 어떤 일이 일어나는지 살펴보겠습니다.

>>> lis.append(8)

Python 리스트의 내부 동작 원리 쉽게 이해하기

append() 메서드를 사용하면 새로운 요소가 리스트의 맨 끝에 추가되고, 리스트의 크기가 1만큼 증가합니다. Python은 내부적으로 여유 공간을 미리 확보해 두기 때문에 요소를 추가할 때마다 새로운 메모리를 할당하지 않아도 된다는 점도 흥미로운 부분입니다.

특정 요소 삭제(remove)

다음으로 리스트에서 특정 값을 삭제하는 방법을 알아보겠습니다.

>>> lis.remove(2)

Python 리스트의 내부 동작 원리 쉽게 이해하기

remove()로 요소를 삭제하면 해당 위치 뒤에 있던 모든 요소들이 한 칸씩 앞으로 이동하여 빈자리를 채우게 됩니다. 따라서 remove() 연산은 최악의 경우 O(n)의 시간 복잡도를 가진다는 점을 기억해 두면 좋습니다.

슬라이싱으로 새 변수 생성

이제 새로운 변수를 선언하고, 리스트의 슬라이싱된 부분을 참조하도록 만들어 보겠습니다.

>>> p=lis[0:3]

Python 리스트의 내부 동작 원리 쉽게 이해하기

슬라이싱을 사용하면 원본 리스트의 일부분을 복사한 새로운 리스트 객체가 생성되며, 변수 p는 이 새로운 객체를 참조하게 됩니다. 즉, p와 lis는 서로 다른 객체를 가리키기 때문에 한쪽을 수정해도 다른 쪽에는 영향을 주지 않습니다.

인덱스로 요소 삭제(del)

마지막으로 특정 인덱스에 위치한 요소를 삭제하는 방법을 살펴보겠습니다.

>>> del p[0]

del 키워드는 인덱스를 기준으로 요소를 삭제하며, remove()와 마찬가지로 삭제된 위치 이후의 요소들이 앞으로 한 칸씩 이동합니다.

결론

이번 글에서는 Python 3.x 환경에서 리스트의 내부 동작 방식을 단계별로 살펴보았습니다. 리스트 초기화, append를 통한 요소 추가, remove와 del을 통한 삭제, 그리고 슬라이싱을 통한 새 객체 생성까지, 각 연산이 메모리와 객체 참조 관점에서 어떻게 처리되는지 이해하면 더욱 효율적인 Python 코드를 작성하는 데 큰 도움이 됩니다.