파이썬에서는 모든 것이(데이터 타입이나 함수, 프로그램까지) 객체로 구현되어 있다.

함수가 일급 객체이기 때문에 JS같이 함수형으로 프로그래밍 할 수도 있다.


파이썬에서 변수를 값으로 초기화하면 자바의 wrapper class 비슷하게 동작한다.

1) 값을 담은 객체로 생성된다. 

2) 변수는 이 객체를 가리킨다.

`` a = 3`` 하면 `` a``라는 변수에 `` 3``이 담기는게 아니라 `` 3``이라는 정수형 객체가 생성되고 `` a``가 객체 `` 3``을 가리키게 된다.

자바의 wrapper class도 값을 담은 객체가 생성되고 이를 가리키게 된다. 그러나 값을 4로 변경하고 싶을 때, 자바의 경우 객체에 담긴 값을 변경하거나 새로운 4라는 객체를 생성하는 두가지 방법을 사용할 수 있지만 파이썬은 후자만 가능하다.

```python

>>> a = 3

>>> b = 3

>>> a is b

True

```

이렇게 하면 `` a``와 `` b`` 모두 `` 3``이라는 객체를 가리킨다. 즉 `` a``, `` b``는 같은 메모리 주소를 가리킨다. 정수형 객체 3의 레퍼런스 카운터가 증가한다.

그러나 항상 이렇게 동작하는 것은 아니다. 자주 사용하는 정수(``0-256``)는 이런식으로 동작하지만, 그 범위를 벗어나는 정수는 정수객체가 메모리에 따로따로 생성된다.


```python

>>> import sys

>>> sys.getrefcount(3)    # 3이라는 객체의 참조 횟수

30

>>> id(3)    # 객체 자체의 주소

25497896

>>> sys.getsizeof(3) # 3이라는 객체의 크기

24

```


AND OR

`` &&``와 `` ||``가 없고 ``python and``와 ``python or``를 사용한다.

특이한 연산자

`` //`` 은 나누고 소수점 이하 버리는 연산. ``c (int)`` 형변환과 비슷한 효과.

`` **`` 은 지수

`` @`` 은 행렬곱


`` math`` 모듈에 다양한 수학 함수 및 상수 `` fabs, log, sin, pi, e`` 등이 있다.

파이썬은 자체적으로 복소수를 지원한다. `` j``를 붙여 허수부를 표현할 수 있다. ``python 1j * 1j``

관련된 수학 함수는 `` cmath`` 모듈에 있다.


정수

파이썬3에서 `` long``이 사라지는 대신 `` int``의 크기가 유연해졌다. 64비트보다 큰 데이터도 처리할 수 있다. 그렇다고 무한대는 아니다.


실수(부동소수점수)

`` double``이 없고 `` float``다.


형변환

형변환은 `` (int)23.3``가 아니라 ``python int(23.3)``와 같은 형식으로 사용한다.

텍스트 문자열을 그대로 변환하는 것도 가능하다. ``python int('-32')``

소수점이나 지수(`` e``)를 포함하는 문자열은 ``python float('32.3')``


반대로 숫자를 문자열로 변환하는 것도 가능하다. ``python str(85.4)``

문자열이 아닌 객체를 ``python print()``로 호출할 때 내부적으로 ``python str()``을 사용하게 된다.