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)
[실행 결과]
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)
[참고자료] 윤성우의 열혈 파이썬 중급편
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] n부터 시작하여 m까지 연속하는 숫자의 합은? (0) | 2020.08.20 |
---|---|
[python] 클래스(class)와 객체(object) 이해하기 (0) | 2020.08.19 |
[python] 객체처럼 다뤄지는 함수, 그리고 이름 없는 함수, 람다(lambda) (0) | 2020.08.19 |
[python] 변경 가능한 객체(mutable), 변경 불가능한 객체(immutable) - #2 (1) | 2020.08.15 |
[Python] 파이썬 list, tuple, dict, set의 스페셜 메서드 정리 (1) | 2020.08.12 |
댓글