코딩하는 해맑은 거북이
[Python] 리스트(list) 복사, 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) 본문
해당 글은 리스트 복사 방법에 대해 다룬다.
1. 얕은 복사(Shallow Copy) : =(등호) 사용
2. 깊은 복사(Deep Copy)
2.1 슬라이싱 (Slicing)
2.2 list() 함수
2.3 copy() 함수
cf) Call by Reference
리스트를 '='(등호)를 통해 리스트의 복사를 시도한다면, 이는 복사가 아닌 참조가 된다.
즉, 어느 한 곳의 값을 변경하면 똑같이 변경된다.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = a # call by reference (a, b는 동일한 주소를 가르킴)
a.append(100)
print(a)
print(b)
# Memory 주소값이 동일한지
print(f'a is b : {a is b}')
# 값이 같은지
print(f'a == b : {a == b}')
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]
a is b : True
a == b : True
그럼 Call by Value인 깊은 복사(Deep Copy)하는 방법 여러개 중 3가지를 알아보겠다.
1. 슬라이싱 (Slicing)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
c = a[:] # call by value
print(a)
print(c)
# Memory 주소값이 동일한지
print(f'a is c : {a is c}') # a is not c => True
# 값이 같은지
print(f'a == c : {a == c}')
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a is c : False
a == c : True
2. list() 함수
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
d = list(a) # call by value
print(a)
print(d)
# Memory 주소값이 동일한지
print(f'a is d : {a is d}') # a is not d => True
# 값이 같은지
print(f'a == d : {a == d}')
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a is d : False
a == d : True
3. copy() 함수
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
e = a.copy() # call by value
print(a)
print(e)
# Memory 주소값이 동일한지
print(f'a is e : {a is e}') # a is not e => True
# 값이 같은지
print(f'a == e : {a == e}')
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a is e : False
a == e : True
'Python > 기본' 카테고리의 다른 글
[Python] 딕셔너리 (Dictionary) 생성, 추가, 변경, 삭제, Key나 Value만 가져오기, key/value 접근 방법 (0) | 2021.01.21 |
---|---|
[Python] 튜플 (tuple) (0) | 2021.01.20 |
[Python] 리스트(list) 길이, 리스트 특정 값의 갯수, 리스트 집계 함수 (0) | 2021.01.19 |
[Python] 리스트(list) 생성, 수정, 추가, 제거, 병합, 순서 뒤집기 (0) | 2021.01.19 |
[Python] 문자열 길이, 문자열 교체, 문자열 대/소문자 변환, 문자열 나누기, 문자열 공백 없애기, 문자열 문자열 체크 등 (0) | 2021.01.19 |
Comments