
저는 해당 책으로 파이썬 기초를 꾸준히 공부 중이며, 마지막 연습문제 파트를 풀면서 부족한 부분 개념을 정리하면서 해당 책으로의 공부를 마무리에 도전합니다!😣

해당 문제는 리스트 a에 + 기호를 사용하여 더한 결과와 extend 함수를 사용하여 더한 결과의 차이를 묻고 있습니다.
a = [1, 2, 3]
a = a + [4,5]
print(a)
# [1, 2, 3, 4, 5]
a = [1, 2, 3]
a.extend([4,5])
print(a)
# [1, 2, 3, 4, 5]
차이점
+를 사용하면 리스트 a의 값이 변하는 것이 아니라 두 리스트가 더해진 새로운 리스트가 반환된다.
extend를 사용하면 리스트 a의 주소 값이 변하지 않고 유지됨
코드로 두 차이를 다시 살펴보겠습니다.
b = [1,2,3]
print('original id:', id(b))
b = b + [[4,5]]
print('b:', b)
print('+ id:', id(b))
해당 코드 실행시, 결괏값으로
original id: 2359106440768
b: [1, 2, 3, [4, 5]]
+ id: 2359106439872
이 나옵니다. 원래 id와 +를 사용 후 리스트의 id가 변경되었습니다!
b = [1,2,3]
print('original id:', id(b))
b.extend([4,5])
print('b:',b)
print('extend id:', id(b))
해당 코드 실행시, 결괏값으로
original id: 2359106440768
b: [1, 2, 3, 4, 5]
extend id: 2359106440768
extend를 사용했을 때, id 값이 같은 것을 알 수 있습니다.
b = [1,2,3]
print('original id:', id(b))
b.append([4,5])
print('b:',b)
print('append id:', id(b))
해당 코드 실행시, 결괏값으로
original id: 2359106439872
b: [1, 2, 3, [4, 5]]
append id: 2359106439872
append를 사용했을 때, extend와 마찬가지로 id 값은 변경되지 않습니다. 즉, extend/append새로운 리스트를 반환하지 않고 원래의 리스트에 값이 추가된다는 것을 알 수 있습니다.
근데 결괏값에는 차이가 살짝 있습니다.
b: [1, 2, 3, 4, 5]
b: [1, 2, 3, [4, 5]]
이 두 차이에 대해 더 알아보겠습니다.
append는 매개변수 그 자체를 원소로 넣음
extend는 가장 바깥쪽 iterable을 넣음
다시 쉽게 설명하면 append는 매개변수로 받는 원소 그대로의 값을 리스트 안으로 집어넣습니다. extend는 가장 바깥쪽 iterable의 모든 항목을 넣습니다.
해당 코드로 다시 살펴 보겠습니다.
x = [1,2,3]
y = 'ping'
x.append(y)
print('append:',x)
x = [1,2,3]
y = 'ping'
x.extend(y)
print('extend:',x)
append: [1, 2, 3, 'ping']
extend: [1, 2, 3, 'p', 'i', 'n', 'g']
두 결괏값을 비교해보면 append는 'ping' 문자열 자체를 그대로 삽입하였고, extend는 가장 iterable한 바깥쪽의 모든 항목을 리스트 내로 삽입합니다.
쉽게 설명하면 가장 바깥쪽의 껍데기를 하나씩 리스트 내로 삽입한다고 생각하면 됩니다!
여기까지 리스트에 +를 사용할 경우, extend, append 함수를 사용한 경우를 살펴보았습니다!