n1 = 1
print(f'주소 : {id(n1)}, 저장된 값 : {n1}')
실행 결과
주소 : 140703198048528, 저장된 값 : 1
n2 = n1
print(f'주소 : {id(n2)}, 저장된 값 : {n2}')
# 저장된 값이 정수와 문자열인 경우에는 생성된 객체를 캐싱함(재활용)
실행 결과
주소 : 140703198048528, 저장된 값 : 1
n2 = 2
print(f'주소 : {id(n2)}, 저장된 값 : {n2}')
실행 결과
주소 : 140703198048560, 저장된 값 : 2
n3 = 1
print(f'주소 : {id(n3)}, 저장된 값 : {n3}')
실행 결과
주소 : 140703198048528, 저장된 값 : 1
n3 = 3 - 1
print(f'주소 : {id(n3)}, 저장된 값 : {n3}')
실행 결과
주소 : 140703198048560, 저장된 값 : 2
# 숫자와 문자열을 제외한 다른 모든 객체들은 값이 사용될 때마다 새로 생성된다
f1 = 1/3
print(f'주소1 = {id(f1)}, 저장된 값 = {f1}')
f2 = 1/3
print(f'주소2 = {id(f2)}, 저장된 값 = {f2}')
c1 = 'abc'
print(f'주소1 = {id(c1)}, 저장된 값 = {c1}')
c2 = 'abc'
print(f'주소2 = {id(c2)}, 저장된 값 = {c2}')
실행 결과
주소1 = 2323978277712, 저장된 값 = 0.3333333333333333
주소2 = 2323978277712, 저장된 값 = 0.3333333333333333
주소1 = 2323975657456, 저장된 값 = abc
주소2 = 2323975657456, 저장된 값 = abc
l1 = [1, 2, 3]
print(f'주소1 = {id(l1)}, 저장된 값 = {l1}')
l2 = [1, 2, 3] # 기존의 리스트를 재활용하지 않고, 새로운 리스트 생성
print(f'주소2 = {id(l2)}, 저장된 값 = {l2}')
l3 = l2
print(f'주소3 = {id(l3)}, 저장된 값 = {l3}')
실행 결과
주소1 = 2815603397192, 저장된 값 = [1, 2, 3]
주소2 = 2815603397704, 저장된 값 = [1, 2, 3]
주소3 = 2815603397704, 저장된 값 = [1, 2, 3]
l2 = [1, 2, 200]
print(f'주소2 = {id(l2)}, 저장된 값 = {l2}')
print(f'주소3 = {id(l3)}, 저장된 값 = {l3}')
실행 결과
주소2 = 2612880133128, 저장된 값 = [1, 2, 200]
주소3 = 2815603397704, 저장된 값 = [1, 2, 100]
l3.remove(1)
print(f'주소2 = {id(l2)}, 저장된 값 = {l2}')
print(f'주소3 = {id(l3)}, 저장된 값 = {l3}')
실행 결과
주소2 = 2815603397704, 저장된 값 = [2, 100]
주소3 = 2815603397704, 저장된 값 = [2, 100]
l4 = l2.copy()
print(f'주소2 = {id(l2)}, 저장된 값 = {l2}')
print(f'주소4 = {id(l4)}, 저장된 값 = {l4}')
실행 결과
주소2 = 2815603397704, 저장된 값 = [2, 100]
주소4 = 2489589484552, 저장된 값 = [2, 100]
# == 연산자 VS is 연산자
a = [1, 2, 3]
b = [1, 2, 3]
print(f'==: {a==b}, is: {a is b}')
실행 결과
==: True, is : False (값을 비교하면 '==', 주소까지 완전히 같은지 비교하면 'is')