Python의 bytes와 str의 차이

Minsang Yu·2023년 5월 28일
0

]

파이썬에는 문자열 데이터의 시퀸스를 표현하는 두가지 타입이 있다.

1. Byte

  • 데이터 형식 : 이진 데이터 를 나타낸다. 0부터 255까지의 정수 값을가지는 바이트 값들의 시퀸스 이다. 바이트 값은 작은 따옴표 (b’ ‘)또는 큰 따옴표(' b" " ')로 둘러싸여 있다.
  • 가변성 : 바이트 객체는 가변(mutable)이다. 값을 수정할 수 있다. 바이트 객체는 인덱싱을 통해 개별 바이트에 접근하여 수정할 수 있다.
  • 문자 인코딩 : 이미 바이트로 구성되어 있으므로 문자 인코딩이 필요하지 않다.

2. str

  • 데이터 형식 : 텍스트 데이터 를 나타낸다. 유니코드 문자를 저장하고 처리하는 데 사용된다. 문자열은 작은 따옴표 ' ' 또는 큰 따옴표 " " 로 둘러싸여 있다.
  • 가변성 : 문자열은 불변(immutable)이다. 한번 생성되면 수정할 수 없다. 따라서 문자열의 일부를 변경하려면 새로운 문자열을 생성해야한다.
  • 문자 인코딩 : 유니코드 문자를 저장하기 때문에 문자 인코딩을 사용하여 바이트로 변환하거나 바이트를 문자로 디코딩 할 수 있다. 일반적으로 UTF-8 인코딩이 대표적으로 사용된다.
# bytes 예제
my_bytes = b'Hello, World!'  # bytes 객체 생성
print(my_bytes)  # b'Hello, World!'

# bytes를 str로 디코딩
decoded_str = my_bytes.decode('utf-8')
print(decoded_str)  # Hello, World!

# str 예제
my_str = '안녕하세요!'  # str 객체 생성
print(my_str)  # 안녕하세요!

# str을 bytes로 인코딩
encoded_bytes = my_str.encode('utf-8')
print(encoded_bytes)  # b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94!'

# bytes 객체의 요소에 접근
print(my_bytes[0])  # 72

# str 객체의 요소에 접근
print(my_str[1])  # '녕'

주로 텍스트를 다룰때는 str 을 사용하고, 이진데이터(이미지, 음성파일 등)를 다룰 때는 bytes 를 사용한다.

그러나 두 가지 타입 간에는 변환이 가능하며 strbytes 로 인코딩하거나 bytesstr 로 디코딩 할 수 있다. 이를 통해 텍스트와 이진 데이터를 변환하고 처리할 수 있다 .

기억해야할 내용

  • bytes에는 8비트 값의 시퀸스가 들어가 있고, str에는 유니코드 코드 포인트의 시퀸스가 들어가 있다.
  • 처리할 입력이 원하는 문자 시퀸스(8비트 값, UTF-8로 인코딩된 문자열, 유니코드 코드 포인트들)인지 확실히 하려면 도우미 함수를 사용하라.
  • bytes와 str 인스턴스를(>, ==, +, %와 같은) 연산자에 섞어서 사용할 수 없다.
  • 이진 데이터를 파일에서 읽거나 파일에 쓰고 싶으면 항상 이진모드 (’rb’나 ‘wb’)로 파일을 열어야한다.
  • 유니코드 데이터를 파일에서 읽거나 파일에 쓰고 싶을 때는 시스템 디폴트 인코딩에 주의하라. 인코딩 차이로 놀라고 싶지 않으면 open에 encoding 파라미터를 명시적으로 전달하라.
profile
Jr. DataEngineer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN