我最近在遍歷集合時遇到了一個奇怪的怪癖(?),我想問是否有人知道為什么會這樣。
首先,我們通過串列進行通常的迭代。以下不會終止,對我來說原因似乎很清楚:每次運行時我們都會添加到串列中,所以當 for 回圈要求下一個數字時,會有一個新的下一個數字,它會保持迭代。
mylist = [0]
for num in mylist:
mylist.append(num 1)
print(mylist)
但是,使用 set 進行類似設定時,for 回圈終止并列印 {0, 1}。幾乎就像它遍歷了 myset 的副本一樣。
myset = {0}
for num in myset:
myset = myset.union([num 1])
print(myset)
uj5u.com熱心網友回復:
當使用myset = myset.union[(num 1)]
編譯器創建一個新實體myset
時,它的地址與前一個不同,所以當你在 for 回圈中再次回圈時,它仍然有一個元素;但是一旦回圈成功迭代,該值就會分配給前一個實體。
這種型別的功能是在進行聯合時實作的,以減少在運行時程序中由于資料更改而產生的任何沖突。
而如果mylist.append(num 1)
它使用相同的實體mylist
并將值附加到相同的地址,因此對于每次迭代,mylist 的值都會不斷變化。不過,這可能會導致您出錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491064.html