파이썬에서 "컨테이너"란 정확히 무엇입니까? (그리고 모든 파이썬 컨테이너 유형은 무엇입니까?)
파이썬 문서는 종종 "컨테이너"에 대해 이야기합니다. 예 :
check_circular가 False(기본값: True)이면 컨테이너 유형에 대한 순환 참조 검사를 건너뛰고 순환 참조로 인해 OverflowError(또는 더 나빠짐)가 발생합니다.
그러나 컨테이너에 대한 공식적인 정의나 목록을 찾을 수 없습니다.
편집하다
파이썬 2.7.3의 경우:
컨테이너인 확인된 내장 유형:
( isinstance(object, collections.Container)
반환 True
)
__contains__
메서드가 정의된 컨테이너 :- 모든 내장 시퀀스 유형: 목록, 바이트 배열, 문자열, 유니코드 문자열 및 튜플.
- 사전
- 모든 내장 세트 유형: 세트 및 frozensets
__contains__
메서드가 정의 되지 않은 컨테이너 :- xrange 개체
컨테이너가 아닌 확인된 내장 유형:
( isinstance(object, collections.Container)
반환 False
):
- 정수 객체
- 플로트 개체
- 긴 물건
- 부울 객체
- 모듈 개체
- 파일 객체
- 버퍼 객체
- 없음 개체
어떤 다른 내장 유형을 확인했는지 알려주시면 isinstance(object, collections.Container)
목록에 추가하겠습니다.
컨테이너는 임의의 수의 다른 객체를 보유하는 모든 객체입니다. 일반적으로 컨테이너는 포함된 개체에 액세스하고 이를 반복하는 방법을 제공합니다.
컨테이너의 예로는 tuple
, list
, set
, dict
; 이것들은 내장 컨테이너 입니다. collections
모듈 에서 더 많은 컨테이너 유형을 사용할 수 있습니다 .
엄밀히 말하면 collections.abc.Container
추상 기본 클래스( collections.Container
Python2에서)는 매직 메서드 in
를 통해 연산자를 지원하는 모든 유형에 __contains__
적용됩니다. 그래서 당신이 쓸 수있는 경우 x in y
다음 y
이다 일반적으로 항상 용기가 아니라 : 차이의 중요한 점 컨테이너 및 일반 반복 가능 객체가 그들에 대한 참조를 유지하는 것이 발전기, 예를 들면 동안 반복 된이 이상, 컨테이너, 기존 개체를 반환 할 때이다 file
오브젝트가 생성됩니다 매번 새로운 개체. 이것은 가비지 수집 및 심층 객체 탐색(예: deepcopy
직렬화)에 영향을 미칩니다 .
예를 들어 연산자를 iter(lambda: random.choice(range(6)), 0)
지원 in
하지만 확실히 컨테이너 는 아닙니다 !
연산자 를 지원하는 다른 방법이 아닌 매직 메서드 Collections.abc.Container
만 고려 하는 추상 기본 클래스 의 의도는 실제 컨테이너가 내부 상태를 관찰할 수 있는 변경 없이 단일 작업으로 포함을 테스트할 수 있어야 한다는 것입니다. 추상 메소드로 정의 하기 때문에 if then 이 연산자 를 지원 한다는 것을 보장합니다 .__contains__
in
Collections.abc.Container
__contains__
isinstance(x, collections.abc.Container)
x
in
그러면 실제로 모든 컨테이너는 __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
'IT이야기' 카테고리의 다른 글
면도기 보기 내부에서 내 모델이 유효한지 어떻게 확인할 수 있습니까? (0) | 2021.09.18 |
---|---|
정적 가상 기능을 가질 수 있습니까? (0) | 2021.09.17 |
distutils에게 gcc를 사용하도록 지시하는 방법은 무엇입니까? (0) | 2021.09.17 |
최대 절전 모드: 일대일 지연 로딩, 선택 사항 = false (0) | 2021.09.17 |
JSON을 LINQ할 수 있습니까? (0) | 2021.09.17 |