2010年8月11日

Python list mistake

今天找到一個很腦殘的bug
(朋友不久前才花了三天抓到多打一個等號)

我的錯誤可以簡化成這樣
remaininglist = somelist

for temp in somelist:
if temp.value>0:
remaininglist.remove(temp)

這樣最後應該可以得到符合值的元素都放在remaininglist裡面
但是實際上裡面少了很多東西
後來才想到可能python在remaininglist = somelist時使用pass by reference
驗證之下果然如此
remaininglist在做remove的時候也會把somelist裡面的元素移除
這樣造成somelist的元素也被移除 而handle指向下一個元素實際上指到下下個元素
造成有些元素沒有被檢查到