python新手關於值傳遞的詢問?

時間 2021-06-02 07:12:36

1樓:愛coding

python中,一切皆物件。

全域性空間中,值20是乙個物件。將20賦給變數a,相當於給20增加了乙個引用。

呼叫函式func(a)時傳遞全域性變數a的值給函式空間的區域性變數num,相當於給值20再增加了乙個引用。

在函式空間中,修改區域性變數num的值為10,由於數值型別屬於不可變型別,相當於新建了乙個物件10,區域性變數num是這個物件的乙個引用。

注意,原物件20並沒有改變,也沒有消失,因為還有全域性變數a在引用它。所以,a的值還是20。

是不是有什麼辦法越過函式區域性空間的壁壘,讓函式也能修改全域性空間的變數呢?答案是採用可變物件(list,dict等)作為函式引數。例項如下:

def func(numlist):

numlist[0]=10

a = [20,]

func(a)

print(a)

手機上沒法測試,不過應當沒什麼問題。

2樓:蘇暢

首先Python所以的變數都是引用。函式傳遞引數發生了一次拷貝。比如原來有:

常量20 記憶體位址200

變數a 記憶體位址100 指向 200 值20傳遞引數的時候,在函式的作用域內部,多了乙個變數:

常量20 記憶體位址200

變數a 記憶體位址100 指向 200 值20變數num 記憶體位址110 指向200 值20然後你修改num,只是吧記憶體位址110的num的指向修改了,對在100的a沒影響。

關於python遞迴的邏輯困惑?

DavyCloud 其實你的思路基本是對的,但是有一點錯誤 在 def 定義的時候,並沒有發生呼叫!下面寫個小例子感受一下 def foobargt foo Traceback most recent call last File line 1,in File line 2,in fooNameEr...

基於python的scrapy爬蟲,關於增量爬取是怎麼處理的?

weni09 這個問題對於我個人非常有幫助,個人覺得自己寫中介軟體,對 url指紋資訊 及 頁面內容hash值 進行持久化 關聯式資料庫,redis,檔案都行,按需 下次爬取比較儲存好的url指紋資訊和頁面hash值,就可以減少重複爬取和重複更新資料。 我是這麼做的 1.資料庫裡儲存抓取網頁的url...

關於 Python 字典的 values 方法返回值的順序?

Tux ZZ 補充 靈劍 的回答。cpython3.6的dict實現搬了pypy的實現,是保持順序的。但你依然不能把dict當作有序的來使用 因為dict的標準規定 不保證 有順序,要保證有順序的請用OrderedDict 七月 字典是無序的,這句話是對的。但是字典的儲存過程卻是按順序的。字典的儲存...