답변:
기본적으로 파이썬리스트는 매우 유연하며 완전히 이질적인 임의의 데이터를 보유 할 수 있으며, 상각 된 일정한 시간 에 매우 효율적으로 추가 될 수 있습니다 . 시간 효율적이고 번거 로움없이 목록을 축소하고 확장해야하는 경우 갈 길이 멀다. 그러나 그들은 C 배열보다 훨씬 더 많은 공간 을 사용 합니다 .
반면에 array.array
유형은 C 배열의 얇은 래퍼입니다. 동일한 유형의 동종 데이터 만 보유 할 수 있으므로 sizeof(one object) * length
메모리 바이트 만 사용합니다 . 대부분 C 배열을 확장 또는 시스템 호출 (예 : ioctl
또는 fctnl
) 에 노출해야 할 때 사용해야합니다 .
array.array
파이썬 2.x ( ) 에서 가변 문자열 을 나타내는 합리적인 방법 array('B', bytes)
입니다. 그러나 Python 2.6+ 및 3.x는로 변경할 수있는 바이트 문자열을 제공합니다 bytearray
.
그러나 숫자 데이터의 동종 배열에서 수학 을 수행 하려면 복잡한 다차원 배열에서 연산을 자동으로 벡터화 할 수있는 NumPy를 사용하는 것이 훨씬 좋습니다.
짧은 이야기를 짧게하려면 : 수학 이외의array.array
이유로 동질적인 C 데이터 배열이 필요할 때 유용합니다 .
sizeof(element)
× (요소 수) 바이트와 오버 헤드를위한 작은 고정 헤더가 필요합니다. 그러나 ndarray에는 불연속 및 희소 배열을 처리하기위한 고급 옵션이 있으며 대형 배열에 메모리를 할당하기위한 플러그 가능한 전략이 있다고 생각합니다 ...이 고급 기능 중 일부는 사용자를 메모리를 적게 만들고 다른 기능은 더 많이 사용하여 성능을 향상시킵니다 기억.
거의 모든 경우에 일반 목록이 올바른 선택입니다. 배열 모듈은 C 배열에 대한 얇은 래퍼와 비슷하며 강력한 형식의 컨테이너 ( docs 참조 )를 제공하며 서명 된 / 서명되지 않은 short 또는 double과 같은 더 많은 C 유사 유형에 액세스 할 수 있습니다. 유형. 배열 모듈은 실제로 필요한 경우에만 사용하고 다른 모든 경우에는 목록을 사용한다고 말하고 싶습니다.
array
은 수학을 수행하기위한 것이 아닙니다 . ndarray
10 ^ 8 숫자의 배열을 합산하기 위해 NumPy를 시도 하면 완전히 list
사라질 것입니다. @tzot는 왜 내장 array
이 수학에 느린 지에 대한 올바른 아이디어를 가지고 있습니다.
배열 모듈은 왜 그것을 사용 해야하는지 알지 못하면 아마도 필요하지 않은 것들 중 하나입니다 (그리고 나는 그것을 모순하는 방식으로 말하려고하지 않습니다!) . 대부분의 경우 배열 모듈은 C 코드와 인터페이스하는 데 사용됩니다. 실적에 대한 질문에보다 직접적인 답변을 제공하려면 다음 단계를 따르십시오.
배열은 일부 용도의 목록보다 효율적입니다. 알고 있지 않은 어레이를 할당해야하는 경우 어레이가 더 빨라지고 더 적은 메모리를 사용할 수 있습니다. GvR에는 배열 모듈이 승자가 될 수 있는 최적화 일화 가 있습니다 (긴 읽기이지만 가치가 있음).
반면에,리스트가 배열보다 많은 메모리를 소비하는 이유 중 일부는 파이썬이 할당 된 모든 요소가 사용될 때 몇 가지 추가 요소를 할당하기 때문입니다. 즉, 항목을 목록에 추가하는 것이 더 빠릅니다. 따라서 항목을 추가 할 계획이라면 목록을 사용하는 것이 좋습니다.
TL; DR 예외적 인 최적화가 필요하거나 C 코드와 인터페이스해야하고 pyrex를 사용할 수없는 경우에만 배열을 사용합니다 .
트레이드 오프입니다!
각각의 장점 :
배열은 특정 유형에만 사용할 수있는 반면 목록은 모든 객체에 사용할 수 있습니다.
배열은 한 유형의 데이터 만 가질 수있는 반면, 목록에는 다양한 객체 유형의 항목이있을 수 있습니다.
배열은 일부 수치 계산에 더 효율적입니다.
이 답변은 List 및 Array 사용시기에 대한 거의 모든 쿼리를 요약합니다.
이 두 데이터 유형의 주요 차이점은 수행 할 수있는 작업입니다. 예를 들어, 배열을 3으로 나눌 수 있으며 배열의 각 요소를 3으로 나눕니다. 목록에서도 마찬가지입니다.
이 목록은 파이썬 구문의 일부이므로 선언 할 필요는 없지만 배열을 사용하기 전에 선언해야합니다.
다른 데이터 유형의 값을 목록 (이종)에 저장할 수있는 반면, Array에서는 동일한 데이터 유형 (동종)의 값만 저장할 수 있습니다.
기능이 풍부하고 빠른 어레이는 목록과 비교하여 산술 연산 및 많은 양의 데이터 저장에 널리 사용됩니다.
배열은 목록에 비해 적은 메모리를 사용합니다.