import copy
a = [[1,2], [3,4]]
b = copy.copy(a)
a[1].append(5)
print(id(a) == id(b)) # True
shallow copy할 때 mutable 객체라면 주소값을 복사한다.
immutable : 수정 불가능한 값
a = 0
b = a
print(a, b) # 0 0
print(id(a) == id(b)) # True
b = 2
print(a, b) # 0 2, Integer형 변수는 Immutable하므로 다른 id값 할당
print(id(a) == id(b)) # False
mutable : 수정 가능한 값
# mutable 예시
a = [1, 2, 3, 4]
b = a # list의 주소값을 저장, b 수정시
print(a, b) # [1, 2, 3, 4] [1, 2, 3, 4]
print(id(a) == id(b)) # True
b[0] = 0
print(a, b) # [0, 2, 3, 4] [0, 2, 3, 4]
print(id(a) == id(b)) # True
a = [1, 2, 3]
b = a[:]
print(id(a) == id(b)) # False
a = [[1, 2], [3, 4]]
b = a[:]
print(id(a) == id(b)) # False
print(id(a[0]) == id(b[0])) # True
a = [[1, 2], [3, 4]]
b = a[:]
a[0] = [5,6]
print(id(a) == id(b)) # False
print(id(a[0]) == id(b[0])) # False
mutable객체의 mutable한 내부의 객체들까지 모두 새롭게 copy되는 것(주소값을 새로 할당)
import copy
a = [[1,2], [3,4]]
b = copy.deepcopy(a)
a[1].append(5)
print(id(a) == id(b)) # False