본문 바로가기
파이썬

파이썬 함수가 호출자가 인식 한대로 일부 인수를 수정할 수 있지만 다른 인수는 수정할 수없는 이유는 무엇입니까?

by º기록 2020. 10. 4.
반응형

변수 범위에 대한 Python의 접근 방식을 이해하려고합니다. 이 예에서 f () main () 내에서 인식되는 것처럼 x 의 값을 변경할 수 있지만 n ?

def f(n, x):
    n = 2
    x.append(4)
    print('In f():', n, x)

def main():
    n = 1
    x = [0,1,2,3]
    print('Before:', n, x)
    f(n, x)
    print('After: ', n, x)

main()

산출:

Before: 1 [0, 1, 2, 3]
In f(): 2 [0, 1, 2, 3, 4]
After:  1 [0, 1, 2, 3, 4]

 

해결 방법

 

일부 답변에는 함수 호출 컨텍스트에 "복사"라는 단어가 포함되어 있습니다. 혼란 스러워요.

Python은 항상 함수 호출 중에 전달하는 객체 를 복사하지 않습니다.

함수 매개 변수는 이름 입니다. 함수를 호출 할 때 Python은 이러한 매개 변수를 호출자 범위의 이름을 통해 전달하는 모든 객체에 바인딩합니다.

객체는 변경 가능 (목록과 같이) 또는 불변 (예 : 정수, Python의 문자열) 일 수 있습니다. 변경할 수있는 변경 가능한 개체입니다. 이름은 변경할 수 없으며 다른 개체에 바인딩 할 수 있습니다.


def f(n, x): # these `n`, `x` have nothing to do with `n` and `x` from main()
    n = 2    # put `n` label on `2` balloon
    x.append(4) # call `append` method of whatever object `x` is referring to.
    print('In f():', n, x)
    x = []   # put `x` label on `[]` ballon
    # x = [] has no effect on the original list that is passed into the function


 

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

 

 

반응형

댓글