爲什麼在以下情況下list2不是[3,5]
?等值列表如何工作? - 可變的基本概念
>>>list1=[3,5]
>>>list2=list1
>>>list1[0]=2
>>>list1
[2,5]
>>>list2
[2,5]
但是當我試圖在這裏它是[3,5]:
>>>list1=[3,5]
>>>list2=list1
>>>list1=[3,5,7]
>>>list2
[3,5]
爲什麼在以下情況下list2不是[3,5]
?等值列表如何工作? - 可變的基本概念
>>>list1=[3,5]
>>>list2=list1
>>>list1[0]=2
>>>list1
[2,5]
>>>list2
[2,5]
但是當我試圖在這裏它是[3,5]:
>>>list1=[3,5]
>>>list2=list1
>>>list1=[3,5,7]
>>>list2
[3,5]
Python變量名稱指向的對象。
list2=list1
導致list2
在同一對象作爲list1
指向。
list1[0]=2
修改list1
對象就地,所以list2
被受到影響。
相反,
list1=[3,5,7]
導致list1
在不同的列表指向。因此list2
和list1
不再指向同一個對象。因此在第二種情況下list2
仍然等於[3, 5]
。
查看Mark Ransom's answer瞭解Python變量/對象/賦值模型的一個很好的解釋。
上面的照片由Online Python Tutor visualizer生成。您可以使用它來逐步查看分配如何更改變量的值。
在第一個示例中,您更改了「就地」指向的list1
和list2
指向的對象。在第二個中,您將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