[英]Python: why does adding to a set in a for loop terminate?
我最近在遍歷集合時遇到了一個奇怪的怪癖(?),我想問是否有人知道為什么會這樣。
首先,我們通過列表進行通常的迭代。 以下不會終止,對我來說原因似乎很清楚:每次運行時我們都會添加到列表中,所以當 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)
在使用myset = myset.union[(num+1)]
時,編譯器正在創建一個新實例myset
,它的地址與前一個不同,因此當您在 for 循環中再次循環時,它仍然有一個元素; 但是一旦循環成功迭代,該值就會分配給前一個實例。
這種類型的功能是在進行聯合時實現的,以減少在運行時過程中由於數據更改而引起的任何沖突。
而在mylist.append(num+1)
的情況下,它使用mylist
的相同實例並將值附加到相同的地址,因此對於每次迭代,mylist 的值都會不斷變化。 不過,這可能會導致您出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.