[Python] 리스트의 더하기, extend/append 차이 (점프투파이썬 종합문제 3번)

미남로그·2021년 11월 2일
1

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


Q3 리스트의 더하기와 extend 함수

해당 문제는 리스트 a에 + 기호를 사용하여 더한 결과와 extend 함수를 사용하여 더한 결과의 차이를 묻고 있습니다.

+, 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]]

이 두 차이에 대해 더 알아보겠습니다.


extend, append 함수의 차이

  • 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 함수를 사용한 경우를 살펴보았습니다!

profile
미남이 귀엽죠

0개의 댓글