질문
만약 1차원 배열을 생성한다면, 리스트로 구현하거나 표준 라이브러리의 'array' 모듈을 사용할 수 있습니다. 저는 항상 1차원 배열에는 리스트를 사용해왔습니다.
어떤 이유나 상황에서 'array' 모듈을 사용하고 싶을까요?
성능 및 메모리 최적화를 위해서인가요, 아니면 놓친 무언가가 있는 건가요?
답변
기본적으로, Python 리스트는 매우 유연하며 완전히 이질적이고 임의의 데이터를 보유할 수 있으며, 암어화된 상수 시간에 매우 효율적으로 추가 할 수 있습니다. 리스트의 크기를 효율적으로 축소하고 확장해야하며 번거롭지 않게하려면 리스트를 사용해야합니다. 그러나 각 항목은 간단한 C 유형 (예 : float
또는 uint64_t
)로 표현 될 수있는 데이터에도 개별 Python 객체의 생성을 필요로하기 때문에 C 배열보다 훨씬 더 많은 공간을 사용합니다.
반면에, array.array
유형은 C 배열에 대한 얇은 래퍼입니다. 동일한 유형의 데이터 (즉, 동일한 유형의 모든 데이터) 만 보유 할 수 있으므로 메모리의 sizeof(one object) * length
바이트 만 사용합니다. 주로 확장이나 시스템 호출 (예 : ioctl
또는 fctnl
)에 C 배열을 노출해야하는 경우에 사용해야합니다.
array.array
는 또한 Python 2.x에서 변경 가능한 문자열을 나타내는 합리적인 방법입니다 (array('B', bytes)
). 그러나 Python 2.6+ 및 3.x에서는 바이트 문자열을 bytearray
로 사용할 수 있습니다.
그러나 숫자 데이터의 동일한 배열에서 수학을 수행하려는 경우에는 NumPy를 사용하는 것이 훨씬 좋습니다. NumPy는 복잡한 다차원 배열에 대한 연산을 자동으로 벡터화 할 수 있습니다.
긴 이야기를 짧게하자면: array.array
는 수학을 수행하는 것이 아닌 다른 이유로 동일한 C 데이터 배열이 필요한 경우에 유용합니다.
댓글