반응형
python은 변수에 int, str, list 등을 변수에 넣을 때 객체를 가르키는 주소를 저장하는 특징을 가지고 있다. 그래서 변수에 자료형을 선언하지 않아도 쉽게 저장할 수 있는 장점을 가지고 있으나 계산할 때는 속도가 느려지는 단점이 있다.
이번 글에는 list를 다룰때 값을 복사하려 했으나 별칭을 만들게 되는 경우를 정리한다.
a_list = [2, 5, 10]
b_list = a_list
b_list.append(100)
a_list.append(200)
b_list.append(1)
print(a_list) # [2, 5, 10, 100, 200, 1] 출력
위와 같이 리스트의 변수를 직접 변수로 받는 경우 새로운 list가 아닌 list의 별칭을 가지게 된다. 1차원 list를 간단하게 값 복사를 하는 방법은 슬라이싱을 사용하면 된다.
a_list = [2, 5, 10]
b_list = a_list[:]
2차원 list에서 1차원 list와 같이 슬라이싱을 이용하여 값을 받게 되면 얕은 복사가 발생하게 된다.
a_list = [1, 2, [5, 10]]
b_list = a_list[:]
b_list[0] = 0
b_list[1] = 0
b_list[2][0] = 0
b_list[2][1] = 0
print(a_list) # [1, 2, [0, 0]]
깊은 복사를 하기위해서는 copy 패키지를 import 한후 copy.deepcopy 함수를 사용하면 된다.
import copy
a_list = [1, 2, [5, 10]]
b_list = copy.deepcopy(a_list)
반응형
'Python' 카테고리의 다른 글
정규표현식(2) [Python] (0) | 2022.11.17 |
---|---|
정규표현식(1) [Python] (0) | 2022.11.16 |
str 불리언(is) 메서드[Python] (0) | 2022.11.11 |
set(세트)[Python] (0) | 2022.11.11 |
같은 폴더에 들어있는 py파일 import하기 (0) | 2022.06.16 |