본문 바로가기
파이썬

파이썬 python dictionary passed as an input to a function acts like a global in that function rather than a local

by º기록 2021. 1. 25.
반응형

나는 아래의 행동으로 인해 매우 혼란 스럽습니다. 사례 1, 3, 4는 예상대로 수행되지만 사례 2는 그렇지 않습니다. 사례 2에서 사전이 함수에서 반환되지 않더라도 함수가 사전 항목의 값을 전역 적으로 변경할 수있는 이유는 무엇입니까? 내가 함수를 사용하는 주된 이유는 나머지 코드에서 함수의 모든 것을 분리하기위한 것이지만 함수 내에서 동일한 변수 이름을 사용하기로 선택하면 이것이 가능하지 않은 것 같습니다. 함수에 명시 적으로 정의 된 모든 것이 해당 함수에 국한된다는 것을 이해하고 있었지만 사전이 정의되고 함수에 대한 입력으로 전달 된 경우에는 그렇지 않은 것 같습니다.

Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.

============= 사례 1 ==============

>>> def testfun1(a):
...     a=2
... 
>>> a=0
>>> testfun1(a)
>>> a
0

============= 사례 2 ==============

>>> def testfun2(b):
...     b['test']=2
... 
>>> b={}
>>> testfun2(b)
>>> b
{'test': 2}

============= 사례 3 ==============

>>> def testfun3():
...     c=2
... 
>>> c=0
>>> testfun3()
>>> c
0

============= 사례 4 ===============


>>> def testfun4():
...     d['test']=10
... 
>>> d={}
>>> testfun4()
>>> d
{'test': 10}

 

해결 방법

 


사본이 아닌 함수에 사전을 전달하고 있습니다. 따라서 수정하면 원본 사본도 수정됩니다.

이를 방지하려면 먼저 함수를 호출하기 전에 사전을 복사해야합니다. 또는 함수 내에서 사전을 복사해야합니다 (사전을 dict 함수로 전달해야 함).

 

참조 페이지 https://stackoverflow.com/questions/15078519

 

 

반응형

댓글