2014-03-26 46 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