2014-02-11 69 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