为什么在以下情况下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