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]