2013-08-23 45 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 

绑定参考两次使得无论名称来指代相同的对象。