dics = {}
divisor = []
for i in range(1, 11):
divisor.clear()
for j in range(1, i + 1):
if i % j == 0:
divisor.append(j)
dics[i] = divisor
print(dics)
💡result
{1: [1, 2, 5, 10], 2: [1, 2, 5, 10], 3: [1, 2, 5, 10], 4: [1, 2, 5, 10], 5: [1, 2, 5, 10], 6: [1, 2, 5, 10], 7: [1, 2, 5, 10], 8: [1, 2, 5, 10], 9: [1, 2, 5, 10], 10: [1, 2, 5, 10]}
위 코드를 보면 첫번째 for문을 반복 시 divisor 리스트를 clear() 해준다.
기대한 결과는 리스트의 모든 값이 삭제된 후 새로운 데이터를 추가한 리스트를 새로운 딕셔너리 key의 value로 추가하는 것이다.
하지만 clear() 함수는 기존 리스트 즉, 레퍼런스 변수의 값을 삭제하는 것이므로
dics[i] = divisor
위 코드를 통해 dvisor 리스트를 참조한 모든 데이터의 값도 clear() 된다.
리스트의 ID를 확인하면 쉽게 이해할 수 있다
divisor = []
print(f' divisor \t\t\tID: {id(divisor)}')
divisor.clear()
print(f' divisor.clear() \tID: {id(divisor)}')
divisor ID: 2286898901568
divisor.clear() ID: 2286898901568 #동일
divisor.clear() 실행 후에도 divisor의 ID는 동일하기 때문에 리스트를 참조한 모든 변수의 값도 삭제된다.
divisor = []
print(f' divisor \t\t\tID: {id(divisor)}')
divisor.clear()
print(f' divisor.clear() \tID: {id(divisor)}')
divisor = []
print(f' divisor = [] \t\tID: {id(divisor)}')
divisor ID: 2286898901568
divisor.clear() ID: 2286898901568 #동일
divisor = [] ID: 2286898868288 #다름
for i in range(1, 11):
divisor = []
# divisor.clear()
for j in range(1, i + 1):
if i % j == 0:
divisor.append(j)
dics[i] = divisor
print(dics)