2014-02-11 27 views

回答

7

Python变量名称指向的对象。

list2=list1 

导致list2在同一对象作为list1指向。

list1[0]=2 

修改list1对象就地,所以list2被受到影响。

enter image description here

相反,

list1=[3,5,7] 

导致list1在不同的列表指向。因此list2list1不再指向同一个对象。因此在第二种情况下list2仍然等于[3, 5]enter image description here

查看Mark Ransom's answer了解Python变量/对象/赋值模型的一个很好的解释。

上面的照片由Online Python Tutor visualizer生成。您可以使用它来逐步查看分配如何更改变量的值。

1

在第一个示例中,您更改了“就地”指向的list1list2指向的对象。在第二个中,您将list1分配给全新对象,仅保留指向原始对象的list2。使用id()is时看到两个名字指向同一个对象:

>>> list1=[3,5] 
>>> list2=list1 
>>> list1[0]=2 
>>> list1 is list2 
True 

>>> list1=[3,5] 
>>> list2=list1 
>>> list1=[3,5,7] 
>>> list1 is list2 
False