Python의 List와 Set, Dictionary등은 call by reference한다.
즉
a = [1, 2, 3]
b = a
b.append(4)
print(a)
# [1, 2, 3, 4]
할당 된 주소가 공유된다.
때문에
자료형 a 와 동일한 자료형 b를 만들기 위해 다음과 같은 방법을 사용할 수 있다.
from copy import copy, deepcopy
l = [1, 2, 3]
s = {1, 2, 3}
d = {1:1, 2:2, 3:3}
# use copy(얕은복사)
l_copy = copy(l)
s_copy = copy(s)
d_copy = copy(d)
# use deepcopy(깊은 복사)
l_deepcopy = deepcopy(l)
s_deepcopy = deepcopy(s)
d_deepcopy = deepcopy(d)
# slicing(새로운 주소 할당)
l_slicing = l[:]
# comprehension(새로 만들기)
l_comprehension = [i for i in l]
s_comprehension = {i for i in s}
d_comprehension = [i:j for i, j in d.items()]
보통 이중으로 리스트나 dictionary에 call by reference하는 자료형이 중첩되었을 경우 깊은 복사가 필요한데
이때 deepcopy는 무겁고 느리기 때문에 comprehension을 사용하면 좋습니다.
'practivceAlgorithm > PYTHON 기능연습' 카테고리의 다른 글
[Python] 메소드 별 입출력 속도 비교 (0) | 2021.09.06 |
---|---|
[Python] zfill과 rjust : 문자의 자릿수를 맞춰주자! (0) | 2021.09.01 |
[문자열 뒤집기] 문자열 슬라이싱 (0) | 2021.08.18 |
파이썬 개인적으로 기억해야 할 것 정리(210721) (0) | 2021.07.21 |
[Python] 특정 문자열 찾기.(find응용) (0) | 2021.07.17 |