老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)
在運(yùn)用python的過程中,發(fā)現(xiàn)當(dāng)函數(shù)參數(shù)為list的時(shí)候,在函數(shù)內(nèi)部調(diào)用list.append()會(huì)改變形參,與C/C++的不太一樣,查閱相關(guān)資料,在這里記錄一下。
python中id可以獲取對(duì)象的內(nèi)存地址
>>> num1 = 10 >>> num2 = num1 >>> num3 = 10 >>> id(num1) >>> id(num2) >>> id(num3)
可以看到num1、num2、num3三個(gè)對(duì)象指向的是一個(gè)地址,python在這里采用的是一種叫做引用計(jì)數(shù)的方式來完成的,很類似C++zhong的智能指針,變量賦值給變量相當(dāng)于同一對(duì)象引用計(jì)數(shù)器+1,而不是重新分配空間。
對(duì)于list對(duì)象可以看到下面的結(jié)果:
>>> list1 = [0,1] >>> list2 = [0,1] >>> id(list1) >>> id(list2) >>> list3 = list1 >>>id(list3)
list1與list3指向同一空間,list2指向另外的一處地址。
python中的函數(shù)傳參是對(duì)象傳遞,同時(shí)也存在局部與全局的問題,在傳參過程中存在兩個(gè)規(guī)則:
通過引用將參數(shù)復(fù)制到局部作用域的對(duì)象中,意味著被用來訪問函數(shù)參數(shù)的變量于提高給函數(shù)的對(duì)象無關(guān),因?yàn)榇嬖谝粋€(gè)復(fù)制問題,這和C語言是相同的。而且修改局部對(duì)象不會(huì)改變?cè)紨?shù)據(jù)。
可以在適當(dāng)位置修改可變對(duì)象??勺儗?duì)象主要就是列表和字典,這個(gè)適當(dāng)位置實(shí)質(zhì)上就是前面分析的局部子對(duì)象的修改不會(huì)改變字典對(duì)象或者列表對(duì)象的ID
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 = 10 pId(num1) incrInt(num1) print(num1) list1 = [0,2] pId(list1) incrList(list1) print(list1)
結(jié)果如下:
python test.py 4299181904 10 4336979912 [0, 2, 1]
可以看到在函數(shù)內(nèi)部,改變int的數(shù)值,則num指向了另一塊內(nèi)存地址,而修改list,則是在同一塊內(nèi)存地址。
在python中,對(duì)象可分為可變(mutable)和不可變(immutable)兩種類型,元組(tuple)、數(shù)值型(number)、字符串(string)均為不可變對(duì)象,而字典型(dictionary)和列表(list)的對(duì)象是可變對(duì)象。
所以在傳參過程中要注意下。
以上這篇老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python進(jìn)階教程之函數(shù)參數(shù)的多種傳遞方法
- python函數(shù)參數(shù)*args**kwargs用法實(shí)例
- Python函數(shù)參數(shù)類型*、**的區(qū)別
- python下函數(shù)參數(shù)的傳遞(參數(shù)帶星號(hào)的說明)
- Python中scatter函數(shù)參數(shù)及用法詳解
- python 裝飾器功能以及函數(shù)參數(shù)使用介紹
- Python中函數(shù)參數(shù)設(shè)置及使用的學(xué)習(xí)筆記
- python通過裝飾器檢查函數(shù)參數(shù)數(shù)據(jù)類型的方法
- Python中type的構(gòu)造函數(shù)參數(shù)含義說明
- python3中函數(shù)參數(shù)的四種簡單用法
- Python函數(shù)參數(shù)操作詳解
- Python中函數(shù)參數(shù)調(diào)用方式分析
相關(guān)文章
python?matplotlib繪圖過程中設(shè)置線條顏色實(shí)戰(zhàn)舉例
Matplotlib是一個(gè)用于數(shù)據(jù)可視化和創(chuàng)建交互式圖表的Python庫,下面這篇文章主要給大家介紹了關(guān)于python?matplotlib繪圖過程中設(shè)置線條顏色的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05python3用urllib抓取貼吧郵箱和QQ實(shí)例
在本篇文章里小編給大家整理了關(guān)于python3中運(yùn)用urllib抓取貼吧的郵箱以及QQ的實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-03-03python解決Missing 1 required positional ar
這篇文章主要介紹了python解決Missing 1 required positional argument報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python辦公自動(dòng)化之文件的比較合并與xml操作
這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化之文件的比較合并與xml文件操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),需要的可以參考一下2023-12-12用Python進(jìn)行基礎(chǔ)的函數(shù)式編程的教程
這篇文章主要介紹了用Python進(jìn)行基礎(chǔ)的函數(shù)式編程的教程,除了面向?qū)ο缶幊桃馔狻ython還可以進(jìn)行簡單的不依賴外部變量的函數(shù)式編程,本文介紹了其中的一些基礎(chǔ),需要的朋友可以參考下2015-03-03Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn)
這篇文章主要介紹了Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03