본문 바로가기
코딩 연습/코딩배우기

[python] 변경 가능한 객체(mutable), 변경 불가능한 객체(immutable) - #1

by good4me 2020. 8. 12.

goodthings4me.tistory.com

 

변경 가능한 객체(mutable)인 리스트와 변경 불가능한 객체(immutable)인 튜플의 차이점

 

 

# 같은 변수일 경우, 리스트와 튜플의 차이

lst = [1, 2]
print('lst:',id(lst))

lst += [3, 4]
print('lst:',id(lst)) # 참조(주소)값이 같다

tu = (1, 2)
print('tu:',id(tu))

tu += (3, 4)
print('tu:',id(tu)) # 참조(주소)값이 다름 (새로운 튜플 생성)

print('\n====== 리스트 ============')
# 원본 값을 변경시킴(변경 가능한 객체(리스트))

def add_lst(x, y):
    x += y
    print('id(x) == id(x + y) :', id(x) == id(x + y)) # False
    print('id(x) : ', id(x))
    print('id(x + y) : ', id(x + y))
    print('lst1 : ', lst1) # 값 변경됨
    print('x : ', x) # 다른 변수, 값은 동일

lst1 = [10, 20]
add_lst(lst1, [30, 40])

print('\n====== 튜플 ==============')
# 원본 값을 변경 안시킴(변경 불가능한 객체(튜플))

def add_tup(m, n):
    m += n
    print('id(m) == id(m + n) :', id(m) == id(m + n)) # False
    print('id(m) : ', id(m))
    print('id(m + n) : ', id(m + n))
    print('tup1 : ', tup1) # 원본 값 변경 없음
    print('m : ', m) # 새로운 변수와 값이 생성됨
    
tup1 = (10, 20)
add_tup(tup1, (30, 40))

print('\n# 튜플 원본값이 변경되게 하려면,')

def add_tuple(m, n):
    m += n
    return m # 새로운 튜플을 반환

tup2 = (10, 20)
tup2 = add_tuple(tup2, (30,40)) # 반환된 튜플 대입
print('tup2 : ', tup2)

 

 

IT, 전자제품 선물

 

[실행 결과]

lst: 1519651922048
lst: 1519651922048
tu: 1519650015680
tu: 1519651879248

====== 리스트 ============
id(x) == id(x + y) : False
id(x) :  1519651913408
id(x + y) :  1519651953152
lst1 :  [10, 20, 30, 40]
x :  [10, 20, 30, 40]

====== 튜플 ==============
id(m) == id(m + n) : False
id(m) :  1519647147488
id(m + n) :  1519651905600
tup1 :  (10, 20)
m :  (10, 20, 30, 40)

# 튜플 원본값이 변경되게 하려면,
tup2 :  (10, 20, 30, 40)

 

[참고자료] 윤성우의 열혈 파이썬 중급편

 

댓글