불변/가변 바이트 배열은 바이트와 또 하나의 문자열 자료형이라고 생각하면 이해가 쉽다. 문자열 객체가 갖고 있는 대부분의 메소드를 바이트 배열도 거의 다 갖고 있다. 단, 문자열에서는 문자 코드를 유니코드로 사용하는데 반해, 바이트 배열에서는 문자의 범위가 정수 0~256 코드로 한정된다는 점이 다르다. 원래의 이름은 bytes, byte array지만 내 나름대로 의역해서 불변 바이트 배열, 가변 바이트 배열이라 이름 붙였다(이의 제기 환영합니다. 굽신굽신). 불변/가변 바이트 배열은 불변/가변이라는 속성 말고는 큰 차이가 없기 때문에 어느 한쪽을 알아두면 나머지는 자동으로 알게 되는 것이나 다름 없다. 그래서 오늘은 불변 바이트 배열에 대해 정리를 해보고, 그 다음에 가변 바이트 배열을 다루면서 불변 바이트 배열과 다른 점을 다룰 계획이다.
불변 바이트 배열은 문자열 상수 앞에 b를 붙이거나 문자열의 bytes() 내장함수 또는 문자열의 encode() 메소드를 이용해서 만들 수 있다. 먼저 b를 이용하는 선언은 다음과 같다.
>>> b = b'abc'
>>> b
b'abc'
>>> b[0]
97
>>> b[1]
98
>>> b[2]
99
bytes() 내장 함수는 튜플, 리스트, 문자열 등으로부터 바이트 배열을 만들어 준다.
>>> b = bytes( (97, 98, 99) ) #튜플로부터 바이트 배열 생성
>>> b
b'abc'
>>> b = bytes( 'abc', 'ascii' ) # 문자열로부터 바이트 배열을 생성할 때에는 인코딩을 매개 변수를 같이 넣어줘야 한다.
>>> b
b'123'
문자열에서 바이트 배열을 만들어냈다. 그렇다면 문자열을 바이트 배열로부터 만들어 낼 수 있을까? 있다. decode() 메소드를 이용하면 된다.
>>> b = bytes( 'abc', 'ascii' )
>>> b.decode()
'abc'
앞서 bytes() 내장 함수를 이용해서 문자열 객체를 바이트 배열로 바꿨는데, 문자열의 encode() 메소드를 사용해도 같은 결과를 얻을 수 있다.
>>> s = 'abc'
>>> b = s.encode()
>>> b
b'abc'
불변 바이트 배열은 그야말로 '불변'이다. 일부를 바꾸려고 시도하면 파이썬 인터프리터가 그런 짓 하지 말라고 나를 나무랄 것이다. 한번 해보자.
>>> b = b'123'
>>> b[0] = 100
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
b[0] = 100
TypeError: 'bytes' object does not support item assignment
혹시나 했는데 역시나였다. 이제 가변 바이트 배열을 살펴보자. 가변 바이트 배열은 bytearray() 내장 함수를 이용해서 생성한다. byte() 내장 함수처럼 순서열을 매개 변수로 받아 가변 바이트 배열을 만들어낸다. 한번 사용해 보자.
>>> b = bytearray( b'123' ) #불변 바이트 배열로부터 가변 바이트 배열 만들기
>>> b[0]
49
>>> b[0] = 54 # 첫 번째 원소에 '6' 쓰기
>>> b
bytearray(b'623')
여기까지가 내가 오늘 불변/가변 바이트 배열에 대해 공부한 전부다. 마지막으로 가변 바이트 배열의 메소드를 몇 가지 테스트 하는 것으로 오늘 일기를 마감해야겠다.
>>> b = bytearray( b'123' )
>>> b
bytearray(b'123')
>>> b.append ( 99 ) # 가변 바이트 배열에 덧붙이기.
>>> b
bytearray(b'123c')
>>> b.index( b'23' ) # 일치하는 바이트 배열 찾기
1
>>> b.replace( b'23', b'ab' ) # '23'을 'ab'로 바꾸기
bytearray(b'1abc')
>>> b.remove ( ord('1') ) # '1'을 찾아 제거하기
>>> b
bytearray(b'abc')
'Python' 카테고리의 다른 글
| [파이썬 일기] #5. 프로그램 흐름 제어하기 (0) | 2009/05/31 |
|---|---|
| 파이썬 공부 중간 점검. (0) | 2009/05/22 |
| [파이썬 일기] #4.2.4.3 불변 바이트 배열(bytes)와 가변 바이트 배열(byte array) (0) | 2009/05/20 |
| [파이썬 일기] #4.2.3.2 튜플(Tuple)과 리스트(List) (0) | 2009/05/07 |
| [파이썬 일기] #4.2.3.1 문자열 (0) | 2009/04/30 |
| [파이썬 일기] #4.2.3 순서열(Sequence) (0) | 2009/04/28 |

