[Python]얕은 복사 vs 깊은 복사

객체 복사의 종류와 특징에 대해 알아보자.

"""
Shallow Copy(얕은복사) & Deep Copy(깊은복사)

객체 복사의 종류 : Copy, Shallow Copy, Deep Copy
"""

# Copy
a_list = [1, 2, 3, [4, 5, 6], [7, 8, 9]]
b_list = a_list

print(id(a_list), id(b_list))
"""
4365226560 4365226560
"""

b_list[2] = 100

print('a_list = ', a_list)
print('b_list = ', b_list)
"""
a_list =  [1, 2, 100, [4, 5, 6], [7, 8, 9]]
b_list =  [1, 2, 100, [4, 5, 6], [7, 8, 9]]
"""

b_list[3][2] = 100
print('a_list = ', a_list)
print('b_list = ', b_list)
"""
a_list =  [1, 2, 100, [4, 5, 100], [7, 8, 9]]
b_list =  [1, 2, 100, [4, 5, 100], [7, 8, 9]]
"""

# Shallow Copy
import copy
c_list = [1, 2, 3, [4, 5, 6], [7, 8, 9]]
d_list = copy.copy(c_list)

print(id(c_list), id(d_list))
"""
4369118336 4369118208
"""

d_list[1] = 100
print('c list = ', c_list)
print('d list = ', d_list)
"""
c list =  [1, 2, 3, [4, 5, 6], [7, 8, 9]]
d list =  [1, 100, 3, [4, 5, 6], [7, 8, 9]]
"""

d_list[3].append(1000)
d_list[4][1] = 10000

print('c list = ', c_list)
print('d list = ', d_list)
""" 내부 list는 얕은복사가 됐다.
c list =  [1, 2, 3, [4, 5, 6, 1000], [7, 10000, 9]]  
d list =  [1, 100, 3, [4, 5, 6, 1000], [7, 10000, 9]]
"""

# Deep Copy
e_list = [1, 2, 3, [4, 5, 6], [7, 8, 9]]
f_list = copy.deepcopy(e_list)

print(id(e_list), id(f_list))
"""
4310603840 4310604416
"""

f_list[3].append(1_000)
f_list[4][1] = 10_000

print('e list = ', e_list)
print('f list = ', f_list)

"""
e list =  [1, 2, 3, [4, 5, 6], [7, 8, 9]]
f list =  [1, 2, 3, [4, 5, 6, 1000], [7, 10000, 9]]
"""

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다