💡 2차원 배열 초기화 할 때 주의! ( * 연산자 vs for문 이용)
[얕은 복사 & 깊은 복사]
- 얕은 복사(shallow copy)
- 실제 객체 전체를 복사한 것이 아닌, 메모리 주소(참조)만 복사한 것!
- 즉, 실제로는 연결되어있는 상태
- 복사해도 같은 곳을 가리킴(참조)
- 변경 가능한(mutable) 객체일 때에만 얕은 복사를 함
- 대표적으로 = (대입), * (곱셈) 연산자, copy 모듈의 copy 함수가 해당 (+함수 매개변수도 대입에 해당)
- ex. arr2 = arr1
- ex. arr = [ [0] * n] ] * n
- 깊은 복사(deep copy)
- 객체 전체를 모두 새롭게, 전혀 다른 별도의 객체로 생성
- 각각 독립적인 객체
- 복사 후 주소값 달라짐
- 슬라이싱([:]), for문을 통한 2차원 배열 생성, copy 모듈의 deepcopy 함수가 해당
- ex. arr2 = arr1[:]
- ex. arr = [ [0] * n for _ in range(n) ]
- ex. G = copy.deepcopy(graph) <= import copy
cf. 이런 것들을 논하는 상황은
- int, float, tuple, str 과 같이 immutable(값 변경 불가능)한 객체가 아닌, (값이 바뀔 수 없어 다른 각각 id값 가짐)
- list, set, dictionary와 같은 mutable(값 변경 가능)한 객체일 때에만 신경쓰는 것! (같은 id값 가질 수 있음)
[cf. 주소값 비교]
cf. 2차원 배열의 얕은복사 vs 깊은복사 예제
[백준] 연구소
📌문제 https://www.acmicpc.net/problem/14502 🎖️난이도 ✔️풀이 from itertools import combinations from collections import deque import copy def getDim(graph, two_xy_list, pos_list, n, m): # 벽 3..
jiwon-hwang.tistory.com
'[ 언어 및 문법 ] > Python' 카테고리의 다른 글
[Python] 삼항 연산자 (3항 연산자) (0) | 2022.09.03 |
---|---|
[Python] list() vs split() (0) | 2022.08.12 |
[Python] 커스텀 정렬 (cmp_to_key) (0) | 2022.08.10 |
[Python] 정규표현식(re)으로 string에서 문자, 숫자 분리하기 (0) | 2022.08.10 |