Python의 배열 설명!
프로그래밍을 시작하거나 Python에 대해 배우는 경우 이 기사는 배열이 가장 많이 사용되는 데이터 구조 중 하나라는 점에서 유용합니다. 파이썬은 배열을 어떻게 표현합니까? 다양한 문제를 해결하기 위해 Python에서 배열을 어떻게 조작할 수 있습니까? 이것이 우리가 이 기사에서 알아낼 것입니다.
컴퓨터는 정보를 어떻게 저장합니까?
아시다시피 컴퓨터에서 정보의 가장 기본적인 형태는 약간 의 정보로 구성됩니다. 그런 다음 이러한 정보의 8비트를 그룹화하여 바이트 라고 부르는 것을 형성합니다 .
컴퓨터는 이러한 바이트의 매우 큰 청크를 저장할 수 있기 때문에 바이트를 빠르게 읽고 쓸 수 있는 새로운 메커니즘이 필요합니다. 이것은 메모리 주소가 작동하는 곳입니다. 개인 집 주소가 이웃과 사는 곳을 구별하는 것과 같습니다. 컴퓨터는 메모리 주소를 사용하여 서로 다른 데이터 및 정보가 있는 위치를 구분합니다.
컴퓨터가 메모리 주소에 도달하는 데 O(1) 액세스 시간이 걸린다는 것도 언급할 가치가 있습니다. 즉, 바이트 #5489637에 액세스하는 것은 바이트 #64에 액세스하는 것과 같습니다.
배열이란 무엇입니까?
프로그래밍 언어의 일반적인 관행은 변수를 사용하여 메모리의 주소를 참조하는 것입니다. 예를 들어 식별자 X는 바이트 #32를 참조할 수 있습니다.
여러 식별자를 생성하는 여러 메모리 주소를 저장하려는 경우 효율적이고 확장 가능하지 않습니다. 식별자 그룹에 대해 하나의 이름이 있고 숫자를 사용하여 특정 식별자에 액세스하는 것이 더 좋습니다. 이러한 표현은 배열, 즉 컴퓨터 메모리의 연속 부분에 있는 변수 그룹의 표현입니다.
예를 들어 Python의 문자열은 이런 방식으로 저장됩니다. 'example' 텍스트로 새 변수를 선언하면 Python이 할당합니다.
2바이트(유니코드 문자를 저장하는 데 필요한 메모리) * 7(예제 단어의 문자 수) = 이 변수를 저장하기 위한 연속 메모리의 14바이트.
참조 배열
Python은 참조 배열인 다른 유형의 배열을 사용합니다. 이를 이해하기 위해 이 예를 살펴보겠습니다. 호텔을 소유하고 있고 50개의 방이 있다고 가정해 보겠습니다. 다음과 같은 표현:
이를 위해 파이썬은 할당할 연속 메모리 공간의 조건을 존중해야 합니다. 그러나 이름의 길이가 다른 경우(다른 길이는 다른 공간 요구 사항을 의미함) 이를 어떻게 수행합니까?
한 가지 해결책은 가장 큰 문자열의 길이를 찾아 모두에게 충분한 메모리 공간을 할당하는 것이지만 일부 공간이 낭비되기 때문에 메모리 효율적이지 않으며 새 문자열이 나오면 어떤 것이 이제 가장 큰 문자열이 될까요?
이 문제를 해결하기 위해 Python은 여러 객체에 대한 연속적인 참조 배열을 생성하므로 이제 각 개별 객체의 크기가 다를 수 있지만 메모리 주소를 저장하는 데 사용되는 메모리는 동일합니다. 이러한 방식으로 Python은 배열의 다른 요소에 대한 일정한 액세스 시간을 보장합니다. 이러한 유형의 배열을 참조 배열이라고 합니다 .
이를 설명하기 위해 다음 이미지를 살펴보십시오.
Python의 목록 과 튜플은 이 유형의 배열을 사용하여 데이터를 저장합니다.
참고: 참조 배열은 참조를 가리키므로 실수로 목록의 값을 수정할 수도 있으므로 참조 값을 변경할 때 주의하십시오. 또한 사본을 만들 때 Shallow 와 Deep copy 의 차이점을 알고 있어야 합니다 .
컴팩트 어레이
이전에 우리는 문자열과 연속 메모리 배열에 문자열을 저장하는 방법에 대해 이야기했습니다. 사실 이 배열을 컴팩트 배열이라고 합니다.
참조 배열보다 소형 배열을 사용하는 이점은 메모리 참조를 저장하는 데 따른 추가 오버헤드가 없으며 기본 데이터를 직접 저장한다는 것입니다. 언급할 가치가 있는 또 다른 이점은 참조 배열인 목록을 사용하는 경우 목록이 데이터가 있는 위치에 대한 참조를 유지하더라도 Python은 데이터가 저장되는 위치를 제어할 수 없다는 것입니다. 하드웨어 작동 방식 때문에 데이터를 서로 가까이 두는 것이 더 효율적이며 동일한 계산에 사용될 수 있습니다.
이러한 장점에도 불구하고 파이썬은 목록과 튜플에 사용하기 편리한 참조 배열을 사용합니다. 그러나 압축 배열 사용을 고집하는 경우 Python은 이를 수행할 수 있는 배열 이라는 모듈을 제공합니다 .
i 여기에서 에 첫 번째 인수로 전달한 것을 알 수 있습니다 array. 소형 배열을 생성하려면 적절한 메모리 할당을 위한 유형을 지정해야 하기 때문입니다. 다른 데이터 유형의 경우 다음 표를 확인하십시오.
어레이 모듈에 대해 자세히 알아보려면 여기를 클릭하십시오 .
배열 모듈의 한 가지 단점은 사용자 정의 데이터 유형을 지원하지 않는다는 것입니다. 이러한 데이터 구조를 가진 소형 배열은 ctypes 모듈을 사용하여 정의할 수 있습니다 .
동적 배열
소형 배열을 만들 때 컴퓨터가 할당할 메모리를 알 수 있도록 해당 배열의 정확한 크기를 지정합니다. 인접한 메모리 영역을 다른 어레이에 할당하기 때문입니다.
실제로 우리는 어레이의 크기를 항상 알 수 없으며 시간이 지남에 따라 확장될 수 있습니다. 이 문제에 대한 해결책으로 Python은 동적 배열이라는 추상화를 제공합니다.
이 추상화는 실제 목록의 길이보다 용량이 더 큰 기본 배열을 유지 관리하는 목록 인스턴스를 사용합니다. 이 추가 용량은 목록에 점점 더 많은 데이터를 추가하는 데 도움이 됩니다.
결국 추가 용량이 소진되면 Dynamic Array는 더 큰 새 어레이를 요청하고 모든 요소를 새 어레이에 복사하고 시스템은 이전 어레이에서 공간을 회수합니다.
Python List는 이 추상화를 기반으로 하지만 튜플과 문자열은 변경할 수 없으므로(변경할 수 없음) 이에 기반하지 않습니다.
동적 배열은 크기가 확장될 뿐만 아니라 목록에서 요소를 삭제하면 축소될 수도 있다는 점도 언급할 가치가 있습니다.
리스트와 튜플
따라서 위 섹션에서 수행한 분석에서 목록 및 튜플 메서드를 두 가지 유형의 메서드로 나눌 수 있습니다.
변경되지 않는 메서드: 튜플과 목록 모두에 존재하며 내용을 변경하지 않는 메서드입니다. 다음은 이러한 방법과 시간 복잡도에 대한 표입니다.
변형 메서드: 목록의 기본 데이터와 구조를 변경하기 때문에 목록에만 존재하는 메서드입니다. 다음은 이러한 방법과 시간 복잡도에 대한 표입니다.
우리는 여기에서 각 방법이 무엇을 하는지 논의하지 않았지만(직관적이고 쉽습니다) Python 목록 및 튜플 에 대해 자세히 알아볼 수 있습니다 .
테이크아웃
- 참조 배열은 배열 메모리에 참조를 저장한 다음 참조를 통해 실제 값에 액세스합니다.
- 소형 배열은 실제 데이터를 연속 메모리에 저장합니다.
- 동적 배열은 요소 수에 따라 자동으로 확장 및 축소되는 배열입니다.
- 목록은 참조 및 동적 배열을 기반으로 합니다.
- 튜플은 참조 배열을 기반으로 합니다.
- 문자열은 소형 배열을 기반으로 합니다.
링크드인:https://www.linkedin.com/in/mohamed-aziz-belaweid/
깃허브:https://github.com/azayz
내 다른 이야기 읽기:
영역 : 검색 증강 언어 모델 사전 교육 얼굴 감정 인식, 가이드에 손!구독하고 내가 무언가를 게시할 때마다 알림을 받으세요.

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































