def copy_function(option, list_data):
if option == "shallow":
list_data.sort()
return [list_data[0], list_data[-1]]
elif option == "deep":
a = list(list_data)
a.sort()
return [a[0], a[-1]]
else:
print("Error")
l = [77,2,364,55,3]
print("deep copy : ", copy_function(option="deep", list_data = l),"\n",
"copy list id :", id(copy_function(option="deep", list_data = l)), "\n", l, "\n")
print("shallow copy : ", copy_function(option="shallow", list_data = l),"\n",
"copy list id :", id(copy_function(option="shallow", list_data = l)), "\n", l, "\n")
1. 깊은복사와 얕은복사의 차이에 대해 살펴보자
깊은복사의 경우 기존의 리스트 값([77, 2, 364, 55, 3])이 유지가 된다. (아래 객체의 비교를 살펴보라.)
얕은복사의 경우 기존의 리스트 값이 변경된다.
Note 1 : 객체의 비교(Comparison of Objects)
L1 = [1,2,3,4,5]
L2 = [1,2,3,4,5]
print(L1 == L2)
print(L1 is L2)
L1과 L2 모두 리스트안의 값들은 1, 2, 3, 4, 5로 동일하다. 그렇기 때문에 L1 == L2 의 결과는 True가 출력된다.
한편, L1과 L2의 리스트가 동일한 리스트인지는 다른 문제이다. 즉, 리스트 안의 서로 값은 동일 하지만 L1과 L2는 서로다른 리스트 이므로 동일한 객체가 아니기 때문에 FALSE가 출력된다.
예컨데, 우리가 동일한 제품의 야구르트를 두개 샀다고 생각해보자. 동일한 내용물에 동일한 용량임엔 틀림 없으나 우리 손에는 2개의 요구르트가 있다. 즉 서로 안의 내용물은 동일하나 요구르트 자체로 보면 서로 다른 요구르트 총 2개를 가지고 있는 것이다.
Q1. id(L1), id(L2)를 통해 객체를 살펴보라.
'Python > Python Syntax' 카테고리의 다른 글
[Syntax 4] map function & filter function (0) | 2020.02.09 |
---|---|
[Syntax 3] iter function & method(반복자 함수와 메소드) (0) | 2020.02.07 |
[Syntax 2] List comprehension (리스트 축약) (1) | 2020.02.07 |