티스토리 뷰
변수 선언
파이썬은 아래와 같이 변수 선언
>>> a = 1 # int 형 선언
>>> type(a) # type() 빌트인 함수를 사용하여 형 확인
int
>>> a
1
>>> a = '1' # ''를 사용하면 str 형이 선언
>>> type(a)
str
>>> a
'1'
>>> a.isdigit() # isdigit()를 사용하여 str형이 정수형 str인지 확인 가능
True
>>> a = 'string' # str 형 선언
>>> type(a)
str
>>> a
'string'
>>> a = 1.23 # floating 형 선언
>>> type(a)
float
>>> a
1.23
>>> a = [1, 2, 3] # list 형 선언
>>> type(a)
list
>>> a
[1, 2, 3]
>>> a = {'a': 1, 'b': 1, 'c': 1} # dictionary 형 선언
>>> type(a)
dict
>>> a
{'a': 1, 'b': 1, 'c': 1}
def func():
pass
>>> a = func # func()를 할당하면 함수가 실행되어 값이 할당 됨.
>>> type(a)
function
>>> a
<function __main__.func()>
파이썬은 다른 프로그래밍 언어와 다르게 변수 선언 시 형(type)을 지정하지 않음.
변수에 어떤 형이 할당되는지에 따라 변수형이 결정됨.
프로그래밍 언어에서
=
기호는 수학기호에서 말하는 똑같다는 의미가 아니고 왼쪽의 값을 오른쪽에 할당하라는 의미.==
이 기호가 똑같다는 의미. 모든 프로그래밍 언어에서 이와 같이 사용.
사실 파이썬은 변수에 어떤 값을 할당할 때 그 값이 할당되는 것이 아니라 값이 실제 저장되어 있는 메모리 주소 정보를 가지고 있음. 즉, a = 1
이라고 선언하면 숫자 1은 int()
클래스의 인스턴스(인스턴스 오브젝트(객체))가 되고 아래 그림과 같이 변수 a
는 int()
인스턴스의 메모리 주소 정보를 가지게 됨.(C
에서는 이것을 pointer
라고 부름)
파이썬은 변수 선언 시 형 정의를 하지 않기 때문에 사용 시 주의 필요. 즉, 다른 프로그래밍 언어에서는 int형으로 선언된 변수에 str형을 할당하면 에러를 발생하지만 파이썬은 에러를 발생하지 않을뿐만 아니라 int형 변수가 str형 변수가 됨. 이것을
Dynamic Type
이라고 함.
형 검증을 위해isinstance()
라는 빌트인 함수를 사용할 수 있음.isinstance(a, str)
변수 a가 str형일 경우True
를 반환하고, 아닐경우False
를 반환.
그래서 파이썬은 모든 것이 객체라고 하는 것임.
is
vs ==
==
는 두 변수가 같은 값을 가지고 있는지 확인할 때 사용
>>> a = 1
>>> b = 1
>>> a == b
True
>>> a = 1
>>> b = 2
>>> a == b
False
is
는 두 변수가 같은 객체인지 확인할 때 사용
>>> a = 1
>>> b = a # 변수 b에 1의 값이 할당되는 것이 아니라 1의 메모리 주소(위치)가 할당 됨.
>>> a is b
True
>>> a = 1
>>> b = 2
>>> a is b
False
특이한 경우
>>> a = 1
>>> b = 1
>>> a == b
True
>>> a is b
True
a = 1
과 b = 1
은 각각 선언되었기 때문에 각각 별도의 int()
클래스의 인스턴스가 생성됨.
그러나 a is b
리턴 값이 True인 이유는 파이썬 인터프리터가 한번 생성된 인스턴스 오브젝트를 캐싱하고 있다가 다른 변수가 사용 시 재 사용함. 즉, a = 1
이 선언될 때 1
의 값을 가지고 있는 int()
클래스의 인스턴스가 생성 및 캐싱되고, b = 1
이 선언될 때 이미 만들어진 1
의 값을 가지고 있는 int()
의 인스턴스를 재 사용함. 그러나 Garbage collection으로 사라진 인스턴스는 재사용할 수 없음.
Garbage collection은 heap 메모리에 생성되어 사용되지 않는 오브젝트를 감지하여 메모리 상에서 지워버리는
CPython
의 기능?이고, JAVA의 Garbage collection와 비슷한 기능?이다. 자세한 사항은 어려운 내용이기에 관심 있으면 Google 검색.
'Basic' 카테고리의 다른 글
Set (0) | 2020.04.25 |
---|---|
파이썬 Tuple (0) | 2020.04.19 |
파이썬 Dictionary (0) | 2020.04.19 |
파이썬 List (0) | 2020.04.12 |
파이썬 String (0) | 2020.04.11 |