def function(data=None):
print(data,id(data))
if data is None:
data=[]
print(data,id(data))
data.append(1)
print("==================")
function()
function()
>> None 1781798096
[] 1780266168520
==================
None 1781798096
[] 1780266174856
==================
在的function()
第一執行,可變data
指「無」對象(ID:1781798096)按代碼的第三行,現在data
指空的列表對象(ID :1780266168520)在的function
秒執行,data
預計將有值1780266168520.的ID,但出人意料的是,它給出1781798096這是當data
所指的「無」對象相同的值。
但是,如果我們改變默認的參數有些武斷名單,說[0],
[0] 1780266149960
[0] 1780266149960
==================
[0, 1] 1780266149960
[0, 1] 1780266149960
==================
,我們發現,它給了相同的ID值。
所以我的問題是,爲什麼我們不能修改這在以前被稱爲「無」對象的變量,爲什麼發生這樣的區別,如果我們設置默認參數設置爲「無」,[0]?
你的問題是沒有意義的。你在問爲什麼局部變量不能在函數調用中保留它們的值? – melpomene
@melpomene如果您將默認參數更改爲某個任意列表,您將發現id值完全相同。爲什麼在將默認參數設置爲「無」時出現這種差異? – Jin
我不明白你在說什麼。 – melpomene