#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목list를 함수의 입력파라메터로 하면서 default 처리를 원할때2019-04-08 21:59
작성자 Level 10

좋은 질문 입니다 ^^.

설명이 잘된 다음 사이트를 가서, 앞의 부분을 잘 읽어 보세요.

https://docs.python-guide.org/writing/gotchas/ 

결론적으로는,, python은 함수의 입력 파라메타에 해당하는 데이타를 하나 만들어서 계속 재사용 합니다.

그런데 list의 경우는 이때 빈 입력파라메타를 계속 주면, 기존의 것을 계속 재사용하는 특성이 발생하고,

본인이 궁금해한 현상이 나옵니다.

이렇게 동작하는 것도 언어의 특징 중 하나이니 뭐라 할순 없고, 원하는 결과를 얻는 방향으로 수정해야지요.

아래의 예제를 수행해 보면서, id()를 통한 메모리 추적 등을 이해해 보세요.


def any_function1(any_number = 1):
print(">>",any_number,":", id(any_number))
any_number += 1
return any_number

def any_function2(any_list = None):
if any_list is None:
print(">> list is empty")
any_list = [1]
else:
print(">>", any_list, ":", id(any_list), ":", len(any_list))
any_list.append(1)
return any_list

def any_function3(any_string = ""):
print(">>", any_string, ":", id(any_string))
any_string += '1'
return any_string

print("Case.1")

print(any_function1(2))
print(any_function1(4))

print(any_function2([10]))
print(any_function2(["hello"]))

print(any_function3("cat"))
print(any_function3("dog"))

print("Case.2")

print(any_function1())
print(any_function1())

print(any_function2())
print(any_function2())

print(any_function3())
print(any_function3())
 
댓글