Python函式引數到底是按值還是按引用

2021-06-27 03:33:46 字數 1076 閱讀 2262

本文是python入門到函式遇到的疑惑。

下面一段是基礎教程的原文python函式。

所有引數(自變數)在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如:

#!/usr/bin/python

# 可寫函式說明

def changeme( mylist ):

"修改傳入的列表"

print "函式內取值: ", mylist

return

# 呼叫changeme函式

mylist = [10,20,30];

changeme( mylist );

print "函式外取值: ", mylist

傳入函式的和在末尾新增新內容的物件用的是同乙個引用。故輸出結果如下:

函式內取值:  [10, 20, 30, [1, 2, 3, 4]]

函式外取值: [10, 20, 30, [1, 2, 3, 4]]

好,看到這裡,自己親手測試一下,**:

def printme(age,str):

str = 'str changed!'

print age,str

return

str = 'ori str'

age = 23

printme(age,str)

print str

輸出結果:

23 str changed!

ori str

好像**不對啊!不是說函式內部修改了引數的值,那麼實際引數也會變嗎?!難道它對字串和列表等還不是同等對待?

有經驗的人都知道,

在python中,strings, tuples, 和numbers是不可更改的物件,而list,dict等則是可以修改的物件

那麼,就記住紅色文字的這句話吧,你想修改不可更改的物件時,其實就開闢了乙個新的儲存空間新的物件,這就是為什麼還有個全域性作用域和區域性作用域的問題。

Python函式引數到底是按值還是按引用

本文是python入門到函式遇到的疑惑。下面一段是基礎教程的原文python函式。所有引數 自變數 在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如 python view plain copy usr bin python 可寫函式說...

Lambda函式到底是個什麼

lambda函式是指簡單的 片段,通常認為是不值得命名的函式,它不能重複使用,能方便程式設計師使用,增強 可讀性,降低 出錯概率。捕獲列表 引數 返回型別編譯器通常會計算lambda函式的返回型別,所以一般不需要指定返回型別,但少數情況編譯器可能無法判斷返回型別,還是需要指定返回型別。c 定義了許多...

Python中的id函式到底是什麼?

python官方文件給出的解釋是 id object cpython implementation detail this is the address of the object in memory.由此可以看出 1 id object 返回的是物件的 身份證號 唯一且不變,但在不重合的生命週期裡...