Posts /

얕은복사 & 깊은복사

15 Apr 2017

복사와 참조

A = [1,2,3,4]
B = A
B is A : true
B[2] = -100
A : [1,2,-100,4] // A도 함께 변경됨

얕은복사(Swallow Copy)

A = [1,2,[3,4]]
B = list(A) : 얕은 복사본 생성
B is A : false
	
B.append(100)
B : [1,2,[3,4],100]
A : [1,2,[3,4]] // A는 변하지 않음
	
B[2][0] = -100
B : [1,2,[-100,4],-100]
A : [1,2,[-100,4]] // A도 변화함

깊은복사(Deep Copy)

import copy

A = [1,2,[3,4]]
B = copy.deepcopy(A)
B[2][0] = -100
B : [1,2,[-100,4]]
A : [1,2,[3,4]] // A 변화하지 않음

번외

Java에서는…

public class route implements Cloneable {
    ArrayList<Integer> path;
    double cost;
    
    public route clone() throws CloneNotSupportedException {
        route route = (route) super.clone(); // Cloneable을 통한 똑같은 객체 복사
        route.path = (ArrayList<Integer>) path.clone();
        route.cost = this.cost;
        return route; // 속성까지 부여하고 반환
    }
    
}

Twitter Facebook Google+