본문 바로가기

Debugging

RuntimeError: Set changed size during iteration

✅ 파이썬(Python) 집합(Set) 자료구조와 관련된 에러

( 딕셔너리와 deque 자료구조에서도 해당된다. )

 

# wrong
s = {(0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 0, -1), (0, -1, 0, 0), (0, 0, -1, 0), (0, 1, 0, 0)}

for i in s:
    re_r = list(i[2:])+(list(i[:2]))
    if tuple(re_r) in routes:
    	s.remove(i)

 

👉 집합(또는 딕셔너리, deque)을 순회할 때, 집합(또는 딕셔너리, deque) 크기가 변경되면 발생한다.
👉 파이썬 3.x 에서는 리스트를 list(a) 형태로 복사하여 해결한다.

# correct
s = {(0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 0, -1), (0, -1, 0, 0), (0, 0, -1, 0), (0, 1, 0, 0)}

for i in list(s):
    re_r = list(i[2:])+(list(i[:2]))
    if tuple(re_r) in routes:
    	s.remove(i)