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개의 댓글