等同列表如何工作? - 可变的基本概念

时间:2014-02-11 14:22:33

标签: python python-3.x

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

2 个答案:

答案 0 :(得分: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

有关Python的变量/对象/赋值模型的详细解释,请参阅Mark Ransom's answer

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

答案 1 :(得分: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