我不確定我是通過傳遞函數(shù)參數(shù)的對象樣式來理解Python調(diào)用的概念的(此處解釋為http://effbot.org/zone/call-by-object.htm)。似乎沒有足夠的例子來很好地闡明這個概念(或者我的google-fu可能很弱?。篋)我寫了這個人為的Python程序來嘗試理解這個概念def foo( itnumber, ittuple, itlist, itdict ): itnumber +=1 print id(itnumber) , itnumber print id(ittuple) , ittuple itlist.append(3.4) print id(itlist) , itlist itdict['mary'] = 2.3 print id(itdict), itdict# Initialize a number, a tuple, a list and a dictionarytnumber = 1print id( tnumber ), tnumber ttuple = (1, 2, 3)print id( ttuple ) , ttupletlist = [1, 2, 3]print id( tlist ) , tlisttdict = tel = {'jack': 4098, 'sape': 4139}print '-------'# Invoke a function and test itfoo(tnumber, ttuple, tlist , tdict)print '-------'#Test behaviour after the function call is overprint id(tnumber) , tnumber print id(ttuple) , ttupleprint id(tlist) , tlistprint id(tdict), tdict該程序的輸出是146739376 13075201660 (1, 2, 3)3075103916 [1, 2, 3]3075193004 {'sape': 4139, 'jack': 4098}---------146739364 23075201660 (1, 2, 3)3075103916 [1, 2, 3, 3.4]3075193004 {'sape': 4139, 'jack': 4098, 'mary': 2.3}---------146739376 13075201660 (1, 2, 3)3075103916 [1, 2, 3, 3.4]3075193004 {'sape': 4139, 'jack': 4098, 'mary': 2.3}如您所見,除了傳遞的整數(shù)外,對象ID(據(jù)我所知指的是內(nèi)存位置)保持不變。因此,對于整數(shù),它(有效地)通過值傳遞,而其他數(shù)據(jù)結構(有效地)通過引用傳遞。我嘗試更改列表,數(shù)字和字典,以僅測試數(shù)據(jù)結構是否已就位。列表中沒有數(shù)字,字典中沒有數(shù)字。我在上面有效地使用了這個詞,因為參數(shù)傳遞的“按對象調(diào)用”樣式似乎根據(jù)上述代碼中傳遞的數(shù)據(jù)結構表現(xiàn)出兩種方式對于更復雜的數(shù)據(jù)結構(例如numpy數(shù)組等),是否有任何快速的經(jīng)驗法則可以識別哪些參數(shù)將通過引用傳遞,哪些參數(shù)將通過值傳遞?
3 回答

慕姐8265434
TA貢獻1813條經(jīng)驗 獲得超2個贊
Python中的數(shù)字,字符串和元組是不可變的。使用擴展分配將重新綁定名稱。
您的其他類型僅是mutated,并保持相同的對象。
添加回答
舉報
0/150
提交
取消