在Python中,變量的傳遞方式既不是純粹的值傳遞,也不是純粹的引用傳遞,而是一種稱為"對象的引用傳遞"的方式。
值傳遞是指在函數調用時,將實際參數的值復制給形式參數,函數中對形式參數的修改不會影響實際參數的值。而引用傳遞是指在函數調用時,將實際參數的引用(內存地址)傳遞給形式參數,函數中對形式參數的修改會影響實際參數的值。
在Python中,當一個變量被作為參數傳遞給函數時,實際上是將該變量的引用(內存地址)傳遞給函數。如果在函數中修改了形式參數的值,會影響原始變量的值,這類似于引用傳遞的行為。但是,如果在函數中給形式參數重新賦值,即讓形式參數指向一個新的對象,原始變量的值不會受到影響,這類似于值傳遞的行為。
下面通過例子來說明:
def foo(x):
x = 10
print('x in foo:', x)
a = 5
foo(a)
print('a after foo:', a)
輸出結果為:
x in foo: 10
a after foo: 5
在函數內部,x = 10
是給形式參數重新賦值,這時形式參數x指向了一個新的對象10,原始變量a的值不會受到影響。所以,可以說Python是使用對象的引用傳遞來傳遞參數。