파이썬에서 for문 안의 리스트가 왜 순서대로 항목을 가져오지 않을까요?
조회수 961회
#Write your function here
def delete_starting_evens(lst):
lst_temp = lst
print("--------------")
print(lst,"lst")
print(lst_temp,"lst_temp")
for i in lst:
print (i,"number")
if i%2 ==0:
print(i,"even")
print(lst_temp.pop(0))
else:
print(i,"odd")
break
return lst_temp
#Uncomment the lines below when your function is done
print(delete_starting_evens([4, 8, 10, 11, 12, 15]))
print(delete_starting_evens([4, 8, 10]))
--결과--
[4, 8, 10, 11, 12, 15] lst
[4, 8, 10, 11, 12, 15] lst_temp
4 number
4 even
4
10 number
10 even
8
12 number
12 even
10
[11, 12, 15]
--------------
[4, 8, 10] lst
[4, 8, 10] lst_temp
4 number
4 even
4
10 number
10 even
8
[10]
위 코드를 돌리면 [4, 8, 10, 11, 12, 15] lst에서 i가 4,8,10으로 가지 않고 4에서 10으로 바로 건너뜁니다. pop(0)을 실행한 건 lst_temp인데 말이죠. 그리고 11에서는 11 odds 가 출력되지 않습니다. 전체적으로 코드 실행 결과가 이해되지 않는데 제가 어딜 잘못한걸까요? 왜그럴까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
lst_temp = lst
해당 구문은 lst 리스트를 복사하는 것이 아니라 lst가 가지고 있는 (메모리 어딘가 존재하는) 리스트의 주소를 lst_temp에 복사하는 것입니다.
(이것을 참조(레퍼런스)라고 부릅니다.)
때문에 lst_temp의 조작은 lst에서도 볼 수 있게 됩니다.
이제 왜 저러한 결과가 나타나는지 아시겠죠?그럼 주소가 아니라 실제로 리스트를 복사하고 싶다면 아래의 방법들을 사용하실 수 있습니다.
lst_temp = lst[:] lst_temp = list(lst)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력