파이썬 버퍼 타입은 무엇입니까?


136

buffer파이썬 에는 유형이 있지만 사용 방법을 모르겠습니다.

에서 파이썬 문서 에 대한 설명은 다음과 같습니다

buffer(object[, offset[, size]])

객체 인수는 버퍼 호출 인터페이스 (예 : 문자열, 배열 및 버퍼)를 지원하는 객체 여야합니다. 객체 인수를 참조하는 새로운 버퍼 객체가 생성됩니다. 버퍼 객체는 객체의 시작 부분 (또는 지정된 오프셋)의 슬라이스입니다. 슬라이스는 객체의 끝까지 확장됩니다 (또는 size 인수가 제공 한 길이를 갖습니다).

답변:


145

사용법 예 :

>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world

이 경우 버퍼는 길이가 5 인 위치 6에서 시작하는 하위 문자열이며 추가 저장 공간이 필요하지 않습니다.이 문자열은 문자열 조각을 참조합니다.

이 같은 짧은 문자열에는 유용하지 않지만 많은 양의 데이터를 사용할 때 필요할 수 있습니다. 이 예제는 변경 가능을 사용합니다 bytearray.

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

데이터에 대해 둘 이상의보기를 원하고 여러 사본을 메모리에 보유하지 않으려는 경우 매우 유용합니다.

참고 buffer이름이 더 나은로 대체되었습니다 memoryview파이썬 2.7에서 하나를 사용 할 수 있지만, 파이썬 3.

또한 C API를 탐구하지 않고는 자신의 객체에 대한 버퍼 인터페이스를 구현할 수 없습니다. 즉 순수 Python에서는 수행 할 수 없습니다.


설명해 주셔서 감사합니다. 그러나 버퍼링과 간단한 슬라이싱의 차이점이 무엇인지 여전히 이해하지 못합니다. 사용하면 s[6:11]추가 저장 공간이 필요하지 않습니다.
satoru

9
일반적으로 슬라이스는 추가 저장 공간을 차지하므로 예가 s[6:11]사본이됩니다. 를 설정 t = s[6:11]한 다음 del s을 사용하면에 의해 사용 된 메모리가 s비워져 t복사 된 것으로 증명 됩니다. (이것을 보려면 s파이썬의 메모리 사용량을 더 크게 추적 해야 합니다). 그러나 데이터가 많지 않은 경우 복사본을 만드는 것이 훨씬 효율적입니다.
Scott Griffiths

1
정말 감사합니다 :) BTW, 파이썬의 메모리 사용을 추적하는 데 사용할 수있는 도구를 알려주십시오.
satoru

메모리 사용량에 대해서는 예를 들어 stackoverflow.com/questions/110259 를 참조하십시오 . 때로는 작업 관리자 / 활동 모니터 / 상단에서 파이썬의 사용법을 보는 것이 가장 쉬운 경우가 있습니다.
Scott Griffiths

13
파이썬은 나 같은 noobs에 들어 : 버퍼는 파이썬 3 memoryview입니다
더크 BESTER

25

나는 파이썬을 네이티브 라이브러리와 인터페이스 할 때 버퍼가 유용하다고 생각합니다. (Guido van Rossum 은이 메일 링리스트 게시물buffer 에서 설명합니다 ).

예를 들어, numpy는 효율적인 데이터 저장을 위해 버퍼를 사용하는 것 같습니다.

import numpy
a = numpy.ndarray(1000000)

a.data:

<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.