IT이야기

파이썬에서 "컨테이너"란 정확히 무엇입니까?

cyworld 2021. 9. 17. 21:33
반응형

파이썬에서 "컨테이너"란 정확히 무엇입니까? (그리고 모든 파이썬 컨테이너 유형은 무엇입니까?)


파이썬 문서는 종종 "컨테이너"에 대해 이야기합니다. :

check_circular가 False(기본값: True)이면 컨테이너 유형에 대한 순환 참조 검사를 건너뛰고 순환 참조로 인해 OverflowError(또는 더 나빠짐)가 발생합니다.

그러나 컨테이너에 대한 공식적인 정의나 목록을 찾을 수 없습니다.

편집하다

파이썬 2.7.3의 경우:

컨테이너인 확인된 내장 유형:

( isinstance(object, collections.Container)반환 True)

  1. __contains__메서드가 정의된 컨테이너 :

    • 모든 내장 시퀀스 유형: 목록, 바이트 배열, 문자열, 유니코드 문자열 및 튜플.
    • 사전
    • 모든 내장 세트 유형: 세트 및 frozensets
  2. __contains__메서드가 정의 되지 않은 컨테이너 :

    • xrange 개체

컨테이너가 아닌 확인된 내장 유형:

( isinstance(object, collections.Container)반환 False):

  • 정수 객체
  • 플로트 개체
  • 긴 물건
  • 부울 객체
  • 모듈 개체
  • 파일 객체
  • 버퍼 객체
  • 없음 개체

어떤 다른 내장 유형을 확인했는지 알려주시면 isinstance(object, collections.Container)목록에 추가하겠습니다.


컨테이너는 임의의 수의 다른 객체를 보유하는 모든 객체입니다. 일반적으로 컨테이너는 포함된 개체에 액세스하고 이를 반복하는 방법을 제공합니다.

컨테이너의 예로는 tuple, list, set, dict; 이것들은 내장 컨테이너 입니다. collections모듈 에서 더 많은 컨테이너 유형을 사용할 수 있습니다 .

엄밀히 말하면 collections.abc.Container추상 기본 클래스( collections.ContainerPython2에서)는 매직 메서드 in를 통해 연산자를 지원하는 모든 유형에 __contains__적용됩니다. 그래서 당신이 쓸 수있는 경우 x in y다음 y이다 일반적으로 항상 용기가 아니라 : 차이의 중요한 점 컨테이너 및 일반 반복 가능 객체가 그들에 대한 참조를 유지하는 것이 발전기, 예를 들면 동안 반복 된이 이상, 컨테이너, 기존 개체를 반환 할 때이다 file오브젝트가 생성됩니다 매번 새로운 개체. 이것은 가비지 수집 및 심층 객체 탐색(예: deepcopy직렬화)에 영향을 미칩니다 .

예를 들어 연산자를 iter(lambda: random.choice(range(6)), 0)지원 in하지만 확실히 컨테이너 아닙니다 !

연산자 를 지원하는 다른 방법이 아닌 매직 메서드 Collections.abc.Container만 고려 하는 추상 기본 클래스 의 의도는 실제 컨테이너가 내부 상태를 관찰할 수 있는 변경 없이 단일 작업으로 포함을 테스트할 수 있어야 한다는 것입니다. 추상 메소드로 정의 하기 때문에 if then 연산자 지원 한다는 것을 보장합니다 .__contains__inCollections.abc.Container__contains__isinstance(x, collections.abc.Container)xin

그러면 실제로 모든 컨테이너는 __contains__마법의 방법 을 갖게 됩니다 . 그러나 개체가 컨테이너인지 여부를 테스트할 때 isinstance(x, collections.abc.Container)명확성과 Container하위 클래스 검사가 변경 되는 경우 순방향 호환성을 위해 사용해야 합니다 .


http://docs.python.org/dev/library/collections.abc.html#module-collections.abc 에 따르면 컨테이너의 가장 일반적인 정의는 단순히 __contains__. 일반적으로 "컨테이너" 또는 "시퀀스"와 같은 Python 개념은 추상적으로 정의되지 않습니다. 그들은 그들의 행동에 의해 "오리 유형"입니다. 즉, 컨테이너는 in연산자를 사용할 수 있는 것입니다 .

Python 내장 컨테이너 유형은 tuple, list, dict, set, frozenset 및 str 및 unicode(또는 Python 3에서는 bytes 및 str)뿐 아니라 기술적으로 유형이지만 특정 컨텍스트 외부에서 일반적으로 사용되지 않는 몇 가지 다른 구문( 예: 버퍼 객체 및 xrange 객체). collections모듈 에서 추가 컨테이너 유형이 제공됩니다 .


컨테이너는 list또는 와 같은 다른 객체를 포함하는 모든 파이썬 객체입니다 dict. Container유형은 인터페이스처럼 동작, ABC 방송입니다. 컨테이너는 __contains__메서드 를 구현하는 클래스입니다 .

여기 문서가 있습니다

ReferenceURL : https://stackoverflow.com/questions/11575925/what-exactly-are-containers-in-python-and-what-are-all-the-python-container

반응형