2013-08-23 44 views
0

這裏是一個小腳本:變量在Python

class Any(object): 
    def __init__(self,x): 
     self.x=x 

l = [Any(2),Any(3),Any(7),Any(9),Any(10)] 
print(len(l)) 
l2=[ind for ind in l] 
l3=l 
print(set(l2).difference(l3)) 
print(l2[1]==l[1]) 
print(l3[1]==l[1]) 
del l2[1] 
print(len(l)) 
del l3[1] 
print(len(l)) 

爲什麼刪除的l2Any實例不會改變l,但刪除它l3改變l雖然它似乎沒有L2之間有什麼區別和l3?

非常感謝!

+3

'l3'和'l'只是*相同*列表的兩個名字... –

+2

http://nedbatchelder.com/text/names.html – nmclean

回答

4

l2是從l

l3創建不同對象指的是相同的對象作爲l。因此,更改ll3中的任何內容都會影響該對象,因此將影響ll3

+0

'l2'是一個不同的對象,但'l'和'l2'是同一個'objects'的列表。因此,修改'l [2]'修改'l2 [2]'但修改'l'不會修改'l2'。是這樣的嗎? –

+1

通過刪除'l2 [1]'你實際上並沒有改變'l2 [1]'對象,你將從列表中刪除第二個元素。 – mishik

5

因爲:

>>> l is l2 
False 
>>> l is l3 
True 

綁定參考兩次使得無論名稱來指代相同的對象。