파이썬의 빌트인 데이터타입

Jun·2021년 4월 19일
0

PYTHON

목록 보기
1/4

파이썬의 빌트인 데이터 타입

빌트인 데이터 타입은 파이썬 자체에서 정의된 데이터 타입이다.
(마치 원룸 들어갈때 원래 있는 가구가 빌트인 가구인것 처럼..)

어떤 데이터의 타입은 type(something)으로 알아낼 수 있다.

카테고리에 따라 아래와 같은 종류가 정의되어 있다.

숫자 형

파이썬에는 정수, 실수, 복소수의 세 가지 숫자 형이 존재한다.

int

  • 파이썬은 임의-정밀도 연산^1을 사용하기 때문에 C언어와 달리 파이썬의 정수형은 무제한의 정밀도를 가지며 오버플로우가 일어나지 않는다.
>>> print(sys.maxsize)
9223372036854775807
>>> type(sys.maxsize)
<class 'int'>
>>> type(sys.maxsize+1)
<class 'int'>

float

  • 실수형은 보통 C 언어의 double을 사용해서 구현된다.
  • 부동 소수점 숫자의 정밀도는 sys.float_info를 이용해서 살펴볼 수 있다.
>>> print(sys.float_info)
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

complex

  • 복소수형은 실수로 표현되는 실수부와 허수부를 갖는다.
  • 숫자 리터럴에 j를 붙여 만들 수 있다.

불변시퀀스형

시퀀스형은 음이 아닌 정수로 인덱싱 할 수 있는 유한한 길이의 순서 있는 집합을 의미한다. (쉽게 말해 기다란 통에 순서대로 데이터들을 담는 형태라고 생각하면 된다.) 그래서 시퀀스형의 데이터타입들은 인덱싱(a[i])과 슬라이싱(a[i:j]), len() 내장함수를 지원한다.

불변 시퀀스형은 시퀀스(열거)형이되 일단 값이 지정되면 값을 변화시킬 수 없다는 의미다.

a = "hello"
a[1] = "y"

# 실행결과
TypeError: 'str' object does not support item assignment

불변 시퀀스형에는 문자열(String), 튜플(Tuple), 바이트열(Bytes)가 있다.

str

  • 유니코드 문자 값을 담는 시퀀스다.
  • 참고로 파이썬에는 Char타입이 없다. 한 글자의 문자는 그냥 길이가 1인 문자열이다.
  • 쌍 따옴표 또는 따옴표로 문자를 감싸 나타내며 문자로만 구성된 list라고 보아도 무방하다.
  • 리스트와의 차이점은 list는 가변 열거형이고 아무 데이터 타입이나 열거 가능하지만 str는 불변 열거형이며 문자로만 구성되어야 한다는 점이다.
  • 그래서 str 타입을 list 타입으로 바꾸기 쉽지만, list 타입을 str 타입으로 바꾸는건 일반적이지 않다.

tuple

empty_tuple = ()
singleton = (1,)
some_tuple = (1, 'a', 1.5, [1,2,'x']) # 아무 타입이나 넣기 가능
  • 콤마로 분리된 값을 의미한다.
  • 문자열과 마찬가지로 불변형이다. (할당 후에 값을 바꿀 수 없다.)

bytes

  • 1바이트(8비트; 0~255 범위의 값)을 연속적으로 저장하는 타입
  • bytes() 생성자 또는 b’ 바이트 리터럴로 생성 가능.

가변 시퀀스형

가변 시퀀스는 어떤 값들의 열거인데 만들어진 후에 변경이 가능한 것.

list

  • 아무 타입이나 임의로 담을 수 있다.
  • 대괄호 []로 생성한다.
  • 말 그대로 그냥 리스트다.

Byte Arrays

  • 가변이라는거만 제외하면 bytes와 기능상 동일하다.
  • bytesarray() 생성자로 만든다.

집합형

  • 집합형들은 수학에서 말하는 집합(Set)과 같은 성질을 띈다.
  • 집합형 타입 안에는 해시가능한 값들만 들어갈 수 있다.[^2]
  • 타입 안에 중복이 존재할 수 없고 순서가 없다. 그래서 인덱싱도 못한다.
  • iterate나 len 함수는 쓸 수 있다.
  • 빠른 멤버십 검사, 시퀀스의 중복항목 제거, 합집합, 차집합, 대칭 차집합등 집합 연산을 쉽게 계산 가능하다.

해시 가능한 객체란?
파이썬에서 ”해시 가능한 객체” (Hashable)는 생성 후 객체의 생애주기동안 값이 변하지 않아 해시값이 일정함이 보장되는 객체를 의미한다.
해시값이 변하지 않기에 해시가능한 타입들은 hash 함수를 써서 해시값을 받아올 수 있고, __eq__() 또는 __cmp__() 메서드를 통한 동일성 확인 또는 비교가 가능하다.
이를 통해 중복을 피하거나 다른 객체끼리 비교가 가능하므로 딕셔너리의 키에 쓸 수 있다.
모든 파이썬의 빌트인 불변 타입은 해시가능하고 모든 가변 타입은 해시가능하지 않다.

>>> a = '123'
>>> b = '123'
>>> hash(a) == hash(b)

set

# 중괄호로 생성..
a = {1,2,3}

# 추가 가능
a.add(4)
a
> {1, 2, 3, 4}

# 삭제 가능
>>> a.remove(3)
>>> a
{1, 2, 4}

# 인덱싱 안됨 
a[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
  • 가변 집합이다.
  • set() 또는 중괄호로 생성하고, add() 메소드로 집합의 내용을 수정 가능하다.

frozenset

  • 불변 집합이다, 즉 추가 삭제 불가함..!
  • frozenset() 생성자로 만든다.
  • 생성된 후 해시가능하다. 다른 집합의 원소나 딕셔너리의 키로 사용가능하다.

매핑형

매핑형은 해시 가능한 값을 임의의 객체에 대응(매핑)시키며, 가변 객체이다.

dict

  • 키 - 값의 쌍으로 이루어져있는 데이터 타입이다.
  • 해시 가능한 값만 키로 사용 가능하다.
  • dict 생성자 또는 {} 중괄호를 사용해서 생성 가능하다.

논리값

파이썬에는 False, True의 두 가지 상수 객체가 존재하고 주로 논리값 (참, 거짓)을 나타내는데 사용된다. 하지만 다른 값들도 참 거짓을 나타내는데 사용될 수 있고, bool()을 통해 해당 값이 어떤 논리값으로 해석되는지 알아볼 수 있다.

기본적으로 파이썬 객체는 클래스에 __bool__() 메서드나 0을 리턴하는 __len__() 메서드를 정의하지 않는 이상 참으로 간주된다.

거짓으로 간주되는 내장 객체들은 다음과 같다.

  • None
  • False
  • 모든 숫자 타입들의 영: 0, 0.0, 0j, Decimal(0), Fraction(0,1)
  • 빈 시쿼스 및 컬렉션: ‘’, (), [], {}, set(), range(0)

bool

  • bool 타입은 정수형의 서브 클래스이다.
>>> int.__subclasses__()
[<class 'bool'>, <enum 'IntEnum'>, <enum 'IntFlag'>, <class 'sre_constants._NamedIntConstant'>]

[^2]: 해시 가능하다는건 불변성을 의미한다. 해당 객체가 만들어진 후부터 불변함이 보장됨을 의미한다. 이러한 경우 __hash__()메서드가 존재한다.

profile
개발합니다.

0개의 댓글