본문 바로가기

개발 공부/Python4

pop(0)와 pop()의 차이 list.pop([i]) 목록에서 지정된 위치에서 항목을 제거하고 반환합니다. 인덱스를 지정하지 않으면 a.pop()이 리스트의 마지막 항목을 제거하고 반환합니다. pop(0)의 시간 복잡도가 O(n)인 이유 먼저 pop()을 살펴보자. 위에서 말했듯이 pop()이 리스트의 마지막 항목을 제거하고 반환한다. 그렇기에 별다른 처리 과정이 필요하지 않기에 pop()의 시간 복잡도는 O(1)이다. 그렇다면 끝 원소가 아닌 그 외의 원소를 pop하는 것은 무엇이 다를까? 우선 python의 list는 배열로 설계되었음을 알아야 한다. 따라서 중간의 원소를 삭제하려면 해당 원소 다음 인덱스 원소들을 앞으로 당겨주어야 한다. 예를 들어, a= [1, 2, 3, 4] 란 list가 있을 때 원소 2를 지우고 싶으면 .. 2021. 8. 17.
len()의 시간 복잡도가 O(1)인 이유 len()의 시간 복잡도가 O(1)인 이유가 뭘까? 여기서 잠깐 우리가 배열을 하나 선언했다고 가정하자. 그렇다면 배열의 크기를 알기 위해서는 원소가 얼만큼 저장되었는지 세어봐야 한다. 이러한 방식이라면 len()의 시간 복잡도는 O(n)이 더 타당하지 않을까? 이 의문을 해결하면 pop()이 왜 시간 복잡도가 O(1)인지 이해할 수 있다. 파이썬은 어떻게 선언한 배열의 크기를 바로 알 수 있는 걸까? __len__() python에서 len()은 실제로는 __len__() method를 호출하는 함수이다. 이 method는 iterable 데이터 구조 클래스에 미리 설계되어있다. 해당 method는 카운터 역활을 한다. 그래서 데이터가 선언되거나 수정(특정 원소 삭제 및 추가 등)될 때 자동적으로 해당.. 2021. 8. 17.
Python - del list에서 del 사용 del은 인덱스를 사용해서 범위 내의 원소들을 삭제하는 함수이다. 리스트의 원소가 삭제해야할 인덱스 범위 안에 있는지 검사해야하므로 시간복잡도는 O(n)이다. >>> a = [-1, 1, 66.25, 333, 333, 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] >>> a [1, 66.25, 1234.5] >>> del a[:] >>> a [] 변수를 del >>> a = 1 >>> b = a >>> del a >>> a Traceback (most recent call last): File "", line 1, in a NameError: name 'a' is not defined >>> b 1 .. 2021. 8. 16.
Python은 변수를 어떻게 저장하는가? 객체(objects) Python을 배울 때 '객체(Objects)'란 단어가 빈번히 나온다. 사전에서 명시한 Object는 물체를 의미한다. 물체의 특성은 구체적인 형태를 가지고 있다는 것이다. Python에서 정의하는 객체도 이와 유사하다. 객체(Objects)는 파이썬이 데이터(data)를 추상화한 것(abstraction)이며 아이덴티티(identity), 형(type), 값(value)을 갖는다. 위의 내용을 요약하자면 객체(Objects)는 자료형(type)을 가지며 메모리(저장 공간)을 차지한다고 할 수 있다. 즉, 변수를 선언하면 선언한 값이 자료형에 따른 메모리 공간을 차지하며 저장되고 변수는 생성한 메모리 공간의 주소(identity)를 참조한다고 할 수 있다. 따라서 Python의 변.. 2021. 8. 16.