객체에는 mutable한 객체와 immutable 한 객체가 있다.
-> mutable 한 객체에는 list, set, dict 이 있다.
mutable 한 객체는 원소를 변경해도 변수의 메모리 주소값은 변하지 않는다.
a = [1,2,3]
b =a # shallow copy
b[0] = 5
a # [5,2,3]
b # [5,2,3]
id(a) # 4396179528
id(b) # 4396179528
a = 'abc'
b = a
a # 'abc'
b # 'abc'
id(a) # 4387454680
id(b) # 4387454680
b = "abcd"
a # 'abc'
b # 'abcd'
id(a) # 4387454680
id(b) # 4396456400
a = [1,2,3]
b = a[:]
id(a) # 4396179528
id(b) # 4393788808
a == b # True
a is b # False
b[0] = 5
a # [1,2,3]
b # [5,2,3]
a = [[1,2], [3,4]]
b = a[:]
id(a) # 4395624328
id(b) # 4396179592
id(a[0]) # 4396116040
id(b[0]) # 4396116040
import copy
a = [[1,2],[3,4]]
b = copy.copy(a)
a[1].append(5)
a # [[1, 2], [3, 4, 5]]
b # [[1, 2], [3, 4, 5]]
import copy
a = [[1,2],[3,4]]
b = copy.deepcopy(a)
a[1].append(5)
a # [[1, 2], [3, 4, 5]]
b # [[1, 2], [3, 4]]
얕은 복사 : 객체를 새로운 객체로 복사하지만 원본 객체의 주소값을 복사하는 것
깊은 복사 : 전체 복사로 참조값의 복사가 아닌 참조된 객체 자체를 복사하는 것
코딩을 하다보면 원본 배열의 보존을 할 필요가 있기 때문에 이럴때는 배열을 '깊은 복사' 해야 함.
참고 : https://crackerjacks.tistory.com/14
https://wikidocs.net/16038