제목 그대로인데요, 진짜 이해가 안 가서 질문 올려봅니다. 리스트에 값 하나 넣어서 리턴하는 간단한 함수를 만들었거든요. 근데 함수를 여러 번 부르니까 이전에 넣었던 값이 안 사라지고 계속 누적돼요.


이런 식으로 짰어요.


def add_item(item, bucket=[]):
    bucket.append(item)
    return bucket

print(add_item(1))
print(add_item(2))
print(add_item(3))


저는 당연히 [1], [2], [3] 이렇게 나올 줄 알았어요. 매번 부를 때마다 bucket이 빈 리스트로 새로 시작하는 거 아닌가요? 근데 실제로는 [1], [1, 2], [1, 2, 3] 이렇게 나옵니다. 값이 안 지워지고 쌓이는 거예요.


혹시 append가 원본을 건드려서 그런가 싶어서 return bucket 앞에 copy 같은 것도 넣어봤는데 그건 리턴값만 바뀌고 다음 호출 때 또 쌓이는 건 똑같더라고요. 함수 밖에서 리스트를 공유하는 것도 아닌데 왜 이러는지 모르겠어요.


기본값으로 빈 리스트 주는 게 뭔가 문제가 있는 건가요? 그럼 매번 새 리스트로 시작하게 하려면 어떻게 짜야 되나요? 초보라서 삽질 중인데 도와주시면 감사하겠습니다.