Python에서 숫자(Numbers) 자료형은 가장 기본이되는 자료형이다.
|
1. 숫자 표현
Python에서 숫자는 크게 4가지의 형태로 표현이 가능하다.
- int (plain integers) : 정수
- long (long integers) : int 보다 범위가 큰 정수
- float (floating point numbers) : 실수
- complex (complex numbers) : 복소수
[int 의 표현]
범위 : -9223372036854775808 ~ 9223372036854775807 (-sys.maxsize-1 ~ sys.maxsize)
C언어의 long을 이용하여 구현된 자료형이다. 다른 언어와 마찬가지로 interger 값이 저장된다. 0x로 시작되는 16진수, 0o으로 시작되는 8진수도 마찬가지로 int 로 다루어진다.
>>> a=1 >>> type(a) <type 'int'> >>> a=0xFF >>> type(a) <type 'int'> >>> a=0o33 >>> type(a) <type 'int'>
>>> import sys >>> sys.maxsize 9223372036854775807 >>> -sys.maxsize-1 -9223372036854775808 >>> -sys.maxsize-2 -9223372036854775809L
[float 의 표현]
범위 : python이 돌아가는 machine에 달려있다. (sys.float_info 를 통해 확인)
>>> 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)
>>> a=1.1 >>> type(a) <type 'float'>
[long 의 표현]
범위 : 문서상으로 특정되어 있지 않다. (unlimited precision)
integer의 범위를 벗어나면 long integer 형으로 표시된다.
>>> a=1234567890L >>> type(a) <type 'long'>
[complex (복소수)의 표현]
>>> a=1+2j >>> type(a) <type 'complex'> >>> a.real 1.0 >>> a.imag 2.0
2. 숫자 계산을 위한 연산자
기본적으로 사용되는 연산자로 사칙연산을 위한 +, -, *, / 가 있다.
>>> 1 + 2 3 >>> 4 - 1 3 >>> 3 * 3 9 >>> 8 / 4 2 >>> 7 / 4 1 >>> 7.0 / 4 1.75 >>> 7 / 4.0 1.75
+, -, * 의 경우 여타 다른 언어들의 계산과 동일하지만 / 의 경우 정수형에서 정수형을 나누게 될 경우 결과도 정수형으로 표현되어 소수점 이하 결과가 표현되지 않는다는 점을 알고 있어야 한다. 소수점까지 모두 표현하기 위해서는 인자 중 하나를 실수로 하여 계산을 하면 된다.
>>> 7 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero >>> 7.0 / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: float division by zero
다른 언어들과 마찬가지로 0으로 나누는 계산은 조심해야 한다. "integer division or modulo by zero" 혹은 "float division by zero" 와 함께 ZeroDivisionError 가 발생한다.
3. Type casting (형 변환)
여타 다른 언어들과 마찬가지로 type을 변경할 수 있다.
int 로 변환 : int(x)
float 로 변환 : float(x)
long 으로 변환 : long(x)
complex 로 변환 : complex(x)
>>> a = 1 >>> type(a) <type 'int'> >>> b = float(a) >>> type(b) <type 'float'>
>>> a = 1.0 >>> type(a) <type 'float'> >>> b = int(a) >>> type(b) <type 'int'>
>>> a = 1 >>> type(a) <type 'int'> >>> b = complex(a) >>> print b (1+0j) >>> type(b) <type 'complex'>
4. 미리 메모리에 할당되어진 숫자들
Python 에서는 실제 사용하지 않더라도 -5 와 256 사이의 정수들을 integer object 배열에 미리 저장해둔다.
이에 따라 해당 숫자를 값으로 할당하려고 할 경우 미리 저장된 object 의 reference 를 참조하도록 한다.
a = 5 b = 5 + 1 - 1 print(str(a) + " : " + str(id(a))) print(str(b) + " : " + str(id(b))) c = 500 d = 500 + 1 - 1 print(str(c) + " : " + str(id(c))) print(str(d) + " : " + str(id(d)))
user@TechNote:~$ /usr/bin/python3 /home/user/test.py 5 : 10914624 5 : 10914624 500 : 140262944414736 500 : 140262913259536
위와 같이 -5 ~ 256 사이의 숫자들은 같은 값일 경우 별도의 메모리 할당 없이 기 할당된 메모리 상의 위치를 가리키고 있으나 그 이외의 숫자들은 별도로 메모리를 할당하여 저장될 수 있음을 볼 수 있다.
Reference
Integer Objects : https://docs.python.org/3/c-api/long.html
'Language > Python' 카테고리의 다른 글
[03-2] Python - for (반복문, Loops) (0) | 2016.08.11 |
---|---|
[02-4] Python - 리스트 (Lists) (0) | 2016.08.09 |
[02-1] Python - 변수 할당의 개념 (0) | 2016.08.08 |
[02-3] Python - 문자열 (Strings) (0) | 2016.08.08 |
[02-5] Python - 튜플 (tuple) (0) | 2016.08.07 |
[03-1] Python - if (조건문) (0) | 2016.08.01 |
pip 그리고 python library 설치. (0) | 2016.01.25 |
Ipython .. python 과 무엇이 다른가. (0) | 2015.09.14 |