2014-03-26 81 views
0

在使用列表時使用'='等號是否可以?即使在myList被更改後,下面的代碼也會導致myOtherList的一致行爲。是否有使用.append()而不是'='直等號的隱藏好處?Python:列出等於列表或對於列表中的每個列表附加

myList=[1, 2, 3, 4, 5]  
myOtherList=myList  
myThirdList=[]  
for each in myList: 
    myThirdList.append(each) 
print myOtherList==myThirdList # True 
myList=[] 
print myOtherList==myThirdList # True 
+1

名稱「mylist」被反彈,指向一個新的空列表。原始列表尚未更改。 myOtherList仍指向原始列表。所以是的,這是好的,如果這是你想要它做的。 – TessellatingHeckler

回答

3

==is

之間有非常顯著差異鑑於你例如:

>>> myList = [1, 2, 3, 4, 5] 
>>> myOtherList = myList 
>>> myOtherList == myList 
True 
>>> myOtherList is myList 
True 

這表明,不僅做到了兩個列表包含以相同的順序相同的價值觀,他們實際上,相同的列表。鑑於:

>>> myThirdList = [] 
>>> for each in myList: 
     myThirdList.append(each) 
>>> myList == myThirdList 
True 
>>> myList is myThirdList 
False 

它們現在是兩個不同的列表,它們按相同的順序包含相同的值。

+0

很酷,謝謝!一個很好的例子可以看到「is」和「==」之間的區別! – alphanumeric

+0

到目前爲止,我一直在使用「if myVariable == None」和「if not myVariable」。你認爲使用「==」等號(而不是「is」或「not」)顯式定義IF語句更安全嗎? – alphanumeric

+0

@Sputnix它不安全或不太安全,它可以做你想做的或者做不同的事情。它們不可互換 - 嘗試設置'myVariable = []',然後'如果不是MyVariable:print(「hi」)' - 空列表計算爲false,(不爲false)爲真,因此它會打印。「if myVariable == None:print(「hi」)' - 空列表和None不同,所以它保持安靜。 – TessellatingHeckler