在運用python的過程中,發現當函數參數為list 的時候,在函式內部呼叫list.append()會改變形參,與C/C++的不太一樣,查閱相關資料,在這裡記錄一下。 #python中id可以取得
物件>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320
可以看到num1、num2、num3三個物件指向的是一個位址,python在這裡採用的是一種叫做
計數的方式來完成的,很類似C++zhong的智慧指針,變數賦值給變數相當於同一物件參考計數器+1,而不是重新分配空間。 #list1與list3指向同一空間,list2指向另外的一處位址。過程中存在兩個規則:
透過引用將參數複製到局部作用域的物件中,意味著用來存取函數參數的變數於提高給函數的物件無關,因為有一個複製問題,這和
C語言
>>> list1 = [,>>> list2 = [,>>> >>> 4302498128
結果如下:
def incrInt(num): pId(num) num += 1; pId(num)def incrList(listArg): pId(listArg) listArg.append(1); pId(listArg)def pId(arg): print id(arg) num1 = 10pId(num1) incrInt(num1)print(num1) list1 = [0,2] pId(list1) incrList(list1)print(list1)
可以看到在函數內部,改變int的數值,則num指向了另一塊記憶體位址,而修改list,則是在同一塊記憶體位址。 )兩種類型,元組(tuple)、數值型(number)、
字串)均為不可變對象,而字典型(dictionary)和列表(list )的物件是可變物件。
以上是python函數參數的不同的詳細內容。更多資訊請關注PHP中文網其他相關文章!