python中變量都被視為對象的引用。python函數調用傳遞參數的時候,不允許程序員選擇傳值還是傳引用,python參數傳遞采用的都是“傳對象引用”的方式。
這種方式相當於傳值和傳引用的結合,如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值——相當於通過“傳引用”來傳遞對象;如果函數收到的是一個不可變對象(比如數字、字符串或元組)的引用,就不能直接修改原始對象——相當於“傳值”來傳遞對象。
def Func(x):
x = 20
a = 10
Func(a)
print(a)
#輸出10, 調用Func(a)時,Func內部的x變量指向整型對象10,
#(即為整型對象10的引用)。在Func內部嘗試修改一個不可變對象,
#會使得Func內部的x指向一個新的對象20,而外部的變量a仍然指向不可變對象10.
def Func2(x):
x[0] = 20
a = [1,2,3]
Func2[a]
print(a)
#結果為 [20, 2, 3]。
python一般內部賦值變量的話,都是個引用變量,和c語言的傳地址概念差不多。可以通過id(x)來查詢x的內存地址。
如果 a=b的話,a和b的地址相同;如果只是想拷貝,就要用 a = b[:]
