Python에서 내부 함수는 해당 변수가 변경 가능하거나 불변인지 여부에 관계없이 외부 함수의 변수에 액세스할 수 있습니다. 그러나 변경 가능 변수와 불변 변수에 대한 내부 함수의 동작에는 약간의 차이가 있습니다.
불변 변수
불변변수란 정수, 부동소수점수, 문자열, 튜플 등 생성 후 값을 수정할 수 없는 변수를 말한다. 내부 함수에서 외부 함수의 불변 변수를 수정하려고 하면 Python은 외부 함수의 원래 변수를 수정하지 않고 새 지역 변수를 생성하고 해당 범위 내에서 사용합니다.
def outer_function():
x = 10 # 不可变变量
def inner_function():
nonlocal x # 使用 nonlocal 声明以便修改外部函数的变量
x = 20
inner_function()
print(x) # 输出: 10
가변 변수
가변변수란 목록, 사전 등 생성 후 값을 수정할 수 있는 변수를 말한다. 내부 함수에서 외부 함수의 가변 변수를 수정하면 외부 함수의 원래 변수도 실제로 수정하게 됩니다. 왜냐하면 외부 함수는 메모리에서 동일한 객체이기 때문입니다.
def outer_function():
lst = [1, 2, 3] # 可变列表
def inner_function():
lst.append(4) # 修改外部函数的可变列表
inner_function()
print(lst) # 输出[1, 2, 3, 4]