我原本以爲Python是一種純粹的通過引用的語言。Python List&for-each訪問(在內置列表中查找/替換)
來自C/C++我不禁想到內存管理,很難把它從我的腦海中解放出來。所以我試圖從Java的角度來思考它,並把除了原始類型之外的所有東西都視爲通過引用。
問題:我有一個列表,其中包含一堆用戶定義的類的實例。
如果我使用的for-each語法,即:
for member in my_list:
print(member.str);
是member
實際的參考對象的相同呢?
它在幹什麼相當於:
i = 0
while i < len(my_list):
print(my_list[i])
i += 1
我覺得不是,因爲當我在找做了更換,這是行不通的,那就是,這不起作用:
for member in my_list:
if member == some_other_obj:
member = some_other_obj
一個簡單的查找和替換列表。這可以在for-each循環中完成,如果是這樣,怎麼辦?否則,我只需要使用隨機訪問語法(方括號),否則將無法工作,我需要刪除條目,並插入一個新的?即:
i = 0
for member in my_list:
if member == some_other_obj:
my_list.remove(i)
my_list.insert(i, member)
i += 1
在迭代列表期間不會複製值。原因類似於爲什麼[作爲參數傳遞給函數時不將對象複製](http://stackoverflow.com/questions/575196/in-python-why-can-a-function-modify-some-arguments-作爲感知由這-呼叫者-b)。 – jfs