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 七月 字典是無序的,這句話是對的。但是字典的儲存過程卻是按順序的。字典的儲存...