很抱歉這個愚蠢的問題,我是一名新手程序員。但是誰能告訴我為什么下面的程序會以這種方式運行?def lol(a): a=[] a.append(1) return a現(xiàn)在當(dāng)我做k = [2, 3]lol(k)它返回1,但k仍然不變?為什么?非常感謝!
2 回答

滄海一幻覺
TA貢獻1824條經(jīng)驗 獲得超5個贊
在中l(wèi)ol(a),該行a=[]綁定a到新列表。在此行之后,a不再與綁定到同一列表k。因此,您實際上在函數(shù)中修改的是一個新列表,而不是您在參數(shù)中收到的列表。有關(guān)更多信息,請參閱docs。
如果您想k成為[1],則可以改成這樣的形式:
def lol(a):
a[:] = [1]
return a
k = [2, 3]
lol(k) # now k is equal to [1]

慕無忌1623718
TA貢獻1744條經(jīng)驗 獲得超4個贊
檢查嵌入式注釋。
def lol(a): # a and k are pointing to same memory location
a=[] # Now, new list is created, pointing to different memory address.
a.append(1)
return a # returning new list
k = [2, 3] # New list k is created
lol(k)
如果打印k,將得到[2,3]。它根本沒有被lol()更改。
添加回答
舉報
0/150
提交
取消