Python에서는 숫자, 문자열, 리스트뿐만 아니라 함수와 클래스까지도 객체(object) 로 다뤄진다.
예를 들어:
x = 10
여기서 10은 단순한 숫자 값이 아니라 int 타입의 객체다.
print(type(10))
# <class 'int'>
개념적으로는 다음처럼 생각할 수 있다.
x ──→ 10이라는 int 객체
문자열과 리스트도 마찬가지다.
name = "hello"
numbers = [1, 2, 3]
print(type(name)) # <class 'str'>
print(type(numbers)) # <class 'list'>
None 역시 객체다.
x = None
print(type(x))
# <class 'NoneType'>
즉:
10 → int 객체
"hello" → str 객체
[1, 2, 3] → list 객체
None → NoneType 객체
파이썬에서는 함수도 객체다.
def hello():
print("hello")
a = hello
a()
# hello
hello라는 함수 객체를 a라는 다른 변수도 가리킬 수 있다.
hello ─┐
├──→ 함수 객체
a ─────┘
따라서 파이썬의 변수는 값을 직접 담는 상자라기보다, 객체를 가리키는 이름이라고 이해하면 편하다.
a = [1, 2]
b = a
a ─┐
├──→ [1, 2] 리스트 객체
b ─┘
이 경우 a와 b는 같은 객체를 가리킨다.
그래서:
b.append(3)
print(a)
# [1, 2, 3]
b를 통해 리스트를 수정했지만 a에서도 변경된 결과가 보인다.
결국 파이썬에서 "모든 것이 객체다"라는 말은 다음처럼 이해하면 된다.
None도 객체파이썬에서는 값들이 타입을 가진 객체로 존재하고, 변수는 그 객체를 가리킨다.