저는 해당 책으로 파이썬 기초를 꾸준히 공부 중이며, 마지막 연습문제 파트를 풀면서 부족한 부분 개념을 정리하면서 해당 책으로의 공부를 마무리에 도전합니다!😣
해당 문제는 리스트 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
함수를 사용한 경우를 살펴보았습니다!