簡體   English   中英

Python:為什么在 for 循環中添加到集合會終止?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM