답변:
사용법 예 :
>>> 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]
사본이됩니다. 를 설정 t = s[6:11]
한 다음 del s
을 사용하면에 의해 사용 된 메모리가 s
비워져 t
복사 된 것으로 증명 됩니다. (이것을 보려면 s
파이썬의 메모리 사용량을 더 크게 추적 해야 합니다). 그러나 데이터가 많지 않은 경우 복사본을 만드는 것이 훨씬 효율적입니다.
나는 파이썬을 네이티브 라이브러리와 인터페이스 할 때 버퍼가 유용하다고 생각합니다. (Guido van Rossum 은이 메일 링리스트 게시물buffer
에서 설명합니다 ).
예를 들어, numpy는 효율적인 데이터 저장을 위해 버퍼를 사용하는 것 같습니다.
import numpy
a = numpy.ndarray(1000000)
는 a.data
:
<read-write buffer for 0x1d7b410, size 8000000, offset 0 at 0x1e353b0>
s[6:11]
추가 저장 공간이 필요하지 않습니다.