为什么在以下情况下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]
答案 0 :(得分:7)
Python变量名称指向对象。
list2=list1
导致list2
指向与list1
相同的对象。
list1[0]=2
就地修改list1
对象,因此list2
也会受到影响。
相比之下,
list1=[3,5,7]
导致list1
指向不同的列表。因此list2
和list1
不再指向同一个对象。因此,list2
在第二种情况下仍然等于[3, 5]
。
有关Python的变量/对象/赋值模型的详细解释,请参阅Mark Ransom's answer。
上面的图片是由Online Python Tutor visualizer生成的。您可以使用它来查看分配如何逐步更改变量的值。
答案 1 :(得分:1)
在第一个示例中,您更改了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