파이썬에서 모든 변수는 객체를 가리키는 것이다.
a = 3 이라고 선언하면, 메모리에 3을 저장하기 위한 공간을 할당하여 저장하고 a 가 해당 값을 가리키도록 한다.
b = 3 이라고 추가로 선언하면, a is b 는 True가 되며, 3이 저장된 같은 메모리 공간을 b도 가리키게 된다.
위와 같이 메모리 공간을 가리키고있는 수를 래퍼런스 카운트(Reference Count) 라고 하며, 0이 되면 가비지 콜렉션의 대상이 되어 메모리에서 해제한다.
변수는 모두 객체를 가리키는 레퍼런스지만, Mutable 자료형을 가리키는지, Immutable 자료형을 가리키는지에 따라 차이가 있다.
mutable 자료형
set, dict, list 자료형이 해당한다.
변수간 대입 시 shallow copy가 일어난다.
# list shallow copy example
a = [1,2,3]
b = a
print (a is b) # True
a.append(4)
print (a) # [1,2,3,4]
print (b) # [1,2,3,4]
print (a is b) # True
immutable 자료형
mutable 자료형 3가지를 제외한 모든 자료형이 해당한다.
변수간 대입 시 shallow copy가 일어나지만, 변수 값 변경이 불가능하므로, 재할당을 통해 가리키는 값이 변화한다.
# integer shallow copy and reallocation example
a = 3
b = a
print (a is b) # True
a += 6
print (a) # 9
print (b) # 3
print (a is b) # False
파이썬의 조건문은 sql where 절과 유사한 것 같다.
! 을 사용하지 않고, not 을 사용한다. ex) if money not in myBuckets:
else if 를 사용하지 않고, elif 를 사용한다.