빌트인 데이터 타입은 파이썬 자체에서 정의된 데이터 타입이다.
(마치 원룸 들어갈때 원래 있는 가구가 빌트인 가구인것 처럼..)
어떤 데이터의 타입은 type(something)
으로 알아낼 수 있다.
카테고리에 따라 아래와 같은 종류가 정의되어 있다.
파이썬에는 정수, 실수, 복소수의 세 가지 숫자 형이 존재한다.
int
>>> print(sys.maxsize)
9223372036854775807
>>> type(sys.maxsize)
<class 'int'>
>>> type(sys.maxsize+1)
<class 'int'>
float
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
bytes()
생성자 또는 b’
바이트 리터럴로 생성 가능.가변 시퀀스는 어떤 값들의 열거인데 만들어진 후에 변경이 가능한 것.
list
[]
로 생성한다.Byte Arrays
bytes
와 기능상 동일하다.bytesarray()
생성자로 만든다.해시 가능한 객체란?
파이썬에서 ”해시 가능한 객체” (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
frozenset
매핑형은 해시 가능한 값을 임의의 객체에 대응(매핑)시키며, 가변 객체이다.
dict
dict
생성자 또는 {}
중괄호를 사용해서 생성 가능하다.파이썬에는 False
, True
의 두 가지 상수 객체가 존재하고 주로 논리값 (참, 거짓)을 나타내는데 사용된다. 하지만 다른 값들도 참 거짓을 나타내는데 사용될 수 있고, bool()
을 통해 해당 값이 어떤 논리값으로 해석되는지 알아볼 수 있다.
기본적으로 파이썬 객체는 클래스에 __bool__()
메서드나 0을 리턴하는 __len__()
메서드를 정의하지 않는 이상 참으로 간주된다.
거짓으로 간주되는 내장 객체들은 다음과 같다.
None
False
0
, 0.0
, 0j
, Decimal(0)
, Fraction(0,1)
‘’
, ()
, []
, {}
, set()
, range(0)
bool
>>> int.__subclasses__()
[<class 'bool'>, <enum 'IntEnum'>, <enum 'IntFlag'>, <class 'sre_constants._NamedIntConstant'>]
[^2]: 해시 가능하다는건 불변성을 의미한다. 해당 객체가 만들어진 후부터 불변함이 보장됨을 의미한다. 이러한 경우 __hash__()
메서드가 존재한다.